2015-11-08 455 views
2

我正在开发一个web应用程序,并且包含websocket连接。我用websocket(https://www.npmjs.com/package/websocket)安装了带有node.js(5.0.0)的websocket服务器。Firefox无法建立websocket连接,而Chrome可以

在Chrome中它完美的作品,但在Firefox出现在控制台此消息:

Firefox no puede establecer una conexión con el servidor en wss://www.my-dev-server.com:1337/. 

(火狐无法建立与服务器的连接...)

这是服务器端的代码(基本上如同示例):

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 */ 
}; 

回答

4

我,终于,找到了解决办法。

问题是,对于https连接,在端口443中,Firefox已经存储了未知证书的异常,而它需要另一个wss(本例中为端口1337)异常。

我已经在高级首选项中为此端口添加了一个证书例外,现在工作正常。

+1

node.js中的任何编程方法 – mayank

+0

我在我的uat阶段,Chrome和其他浏览器工作正常,在Firefox中面临这个问题 – mayank

+0

不,它是关于浏览器配置。您必须使用可信证书或配置浏览器以允许您的websocket URL使用自签名证书。 – francadaval