2016-03-22 4 views
0

zu feuern Ich versuche, einen grundlegenden WSS-Websockets-Server einzurichten. Das ist mein minimal HTML (mit dem eingebetteten JavaScript):WebSockets über WSS: // scheint keine Ereignisse auf Server

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>Test</title> 
</head> 
<body style="background-color:white"> 
<h1>Test of WSS server</h1> 
<p>Status: <span id=status"></span></p> 
<a href="javascript:message();">Click to send message</a> 
<script src="/newjs/jquery-2.1.1.js"></script> 
<script> 
var connection; 
$(document).ready(function() { 
     window.WebSocket = window.WebSocket || window.MozWebSocket; 
     if (!window.WebSocket) { 
       alert("browser says no"); 
         console.log("Browser does not supports websockets"); 
       return; 
     } 
     setupConnection(); 
}); 
function message() { 
     var msg = "Test Message"; 
     connection.send(msg); 
} 
function setupConnection() { 
     connection = new WebSocket('wss://www.example.com:14000'); 
     connection.onerror = function(error) { 
       console.log('onerror fired'); 
     }; 
     connection.onopen = function(event) { 
       $("#status").html("Open"); 
     }; 
     connection.onmessage = function (message) { 
       alert(message.data); 
     }; 
} 
setInterval(function() { 
     if (connection.readyState !== 1) { 
       setupConnection(); 
     } 
     }, 5000); 
</script> 
</body> 
</html> 

Im Folgenden ist der JS-Server von NodeJS laufen:

var fs=require("fs"); 
var ws_cfg = { 
    ssl: true, 
    port: 14000, 
    ssl_key: '/httpd/conf/ssl.key/my.key', 
    ssl_cert: '/httpd/conf/ssl.crt/my.crt', 
    ca_cert: '/httpd/conf/ssl.crt/gd_bundle-g2-g1.crt' 
}; 
var processRequest = function(req, res) { 
    console.log("Request received.") 
}; 
var httpServ = require('https'); 
var app = null; 
app = httpServ.createServer({ 
    key: fs.readFileSync(ws_cfg.ssl_key), 
    cert: fs.readFileSync(ws_cfg.ssl_cert), 
    ca: fs.readFileSync(ws_cfg.ca_cert), 
    },processRequest).listen(ws_cfg.port); 
var WebSocketServer = require('ws').Server, ws_server = new WebSocketServer({server: app}); 

ws_server.on('open',function(request) { 
     console.log("opening"); 
}); 
ws_server.on('request', function(request) { 
     console.log((new Date()) + ' Connection from origin ' + request.origin + '.'); 
     if (request.origin!='https://www.example.com') { 
       console.log("rejecting request from " + request.origin + " as not coming from our web site"); 
       return; 
     } 
     var connection = request.accept(null, request.origin); 
     connection.on('message', function(message) { 
       console.log("Got a message"); 
     }); 
}); 

ich den Server mit Knoten feuern dann in die Web-Seite laden meine Browser (entweder FF oder Chrome). Mit den Entwicklertools sehe ich, dass die Verbindung scheint. Auf der Serverseite sehe ich die eingerichtete Verbindung mit netstat. Ich habe auch eine Warnung() in der Browser-Seite in der OnOpen() -Funktion gesetzt und es gefeuert.

Das Problem ist, dass keine Konsolenprotokollausgabe erstellt wird. Wenn connection.send (mag) ausgeführt wird, scheint das Ereignis "message" nie auf den Server zu feuern. Ich bin hier ratlos. Ich hatte dies als http: // websocket-Server, aber das ist mein erster Versuch bei WSS :. würde ich nicht nur die Einsicht schätzen

. Hinweise: Sever Name ist nicht example.com obwohl das ist, was ich in meinem Code zeigen

Die Firewall jemand auf Port 14000 verbinden, so dass mit. TCP-Protokoll.

die cert ist ein funktionierendes Wildcard-Zertifikat für die Website.

Antwort

0

endlich herausgefunden, was es war nachdem ich es einen Monat lang ignoriert habe. Es hatte mit dem symbolischen Link (/ httpd) definiert für die SSL-Dateien, wie sich in:

ssl_key: '/usr/local/apache2/conf/ssl.key/my.key', 
ssl_cert: '/usr/local/apache2/conf/ssl.crt/my.crt', 

Wer die symbolische Links verpönt waren wusste:

ssl_key: '/httpd/conf/ssl.key/my.key', 
ssl_cert: '/httpd/conf/ssl.crt/my.crt', 

Sie geändert werden musste? Nun, jetzt machen wir alle.

Verwandte Themen