我正在开发一个网络应用程序,并且包括网络套接字连接。我已经使用带有 websocket 的 node.js (5.0.0) 安装了一个 websocket 服务器 (https://www.npmjs.com/package/websocket)。
在 Chrome 中它运行完美,但在 Firefox 中此消息出现在控制台中:
Firefox no puede establecer una conexión con el servidor en wss://www.my-dev-server.com:1337/.
(Firefox 无法与服务器建立连接...)
这是服务器代码(基本上如示例中所示):
var WebSocketServer = require('websocket').server;
var https = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync('/keyfile.key'),
cert: fs.readFileSync('/pemfile.pem')
};
var port = 1337;
// Create HTTPS service.
var server = https.createServer(options, function(request, response) {
console.log((new Date()) + ' Received request for ' + request.url);
response.writeHead(404);
response.end();
});
server.listen(port, function() {
console.log((new Date()) + ' Server is listening on port ' + port);
});
// create the server
wsServer = new WebSocketServer({
httpServer: server,
autoAcceptConnections: false
});
function originIsAllowed( origin ) {
// TODO: complete
return true;
}
var clients = [];
// WebSocket server
wsServer.on('request', function(request) {
if( !originIsAllowed( request.origin ) ) {
request.reject();
console.log((new Date()) + ' Connection from origin ' + request.origin + 'rejected.');
return;
}
console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');
var connection = request.accept(null, request.origin);
clients.push(connection);
connection.on('message', function( message ) {
if (message.type === 'utf8') {
console.log('Received Message: ' + message.utf8Data);
}
else if( message.type === 'binary' ) {
}
});
connection.on( 'error', function( error ) {
});
connection.on('close', function( reasonCode, description ) {
console.log((new Date()) + " Peer " + connection.remoteAddress + " disconnected.");
});
});
我使用自签名证书进行开发,与 Web 服务器使用的证书相同。
这是我的客户代码:
var connection = new WebSocket('wss://www.my-dev-server.com:1337');
connection.onopen = function () { };
connection.onerror = function (error) { };
connection.onmessage = function (message) {
/* some code here */
};
我终于找到了解决方案。
问题在于,对于 https 连接,在端口 443 中,Firefox 已经存储了未知证书的异常,而它需要 wss 的另一个异常(在本例中为端口 1337)。
我已在高级首选项中为此端口添加了证书例外,现在工作正常。
这很奇怪,但很有效。我按照此链接的答案:https://support.mozilla.org/bm/questions/1350452
用户说的是:
尝试过:FF汉堡菜单、帮助、故障排除模式...它开始在这种无扩展模式下工作,并且在重新启动到正常模式后它仍然工作。那么解决方法是重新启动 Firefox? :-/
所以基本上答案是重新启动你的火狐浏览器。我猜错误是由一些错误调整的 about:config 参数或其他什么引起的。不知道
如何(上面说了只是再清除一下):
Click on the Hamburger menu > Help > Troubleshoot mode > Open
编码快乐!