2015-11-08 188 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