2017-02-26 107 views
0

這是WSexpress.js上的簡單聊天。我收到瀏覽器無法通過websockets連接到服務器的錯誤。websockets,express.js並且無法建立與服務器的連接

客戶端連接:

file: rtc.html 
ws = new WebSocket('wss://' + window.location.hostname + '/wr'); 
ws.onerror = (error) => { console.log(error); }; 
ws.onmessage = (message) => { 
    . . . 

Server代碼:

const express = require('express'); 
const http =  require('http'); 
const WebSocket = require('ws'); 

const app = express(); 

app.get('/rtc', (req, res)=>{ 
    res.sendFile('/home/user/dev/rtc.html'); 
}); 

const server = http.createServer(app); 
const wss = new WebSocket.Server({ server:server, path: "/wr" }); 

. . . 

app.listen(3000); 

UPD:這個問題是由於這樣的事實,我是在webrtc做聊天和Mozilla測試Mozilla不會沒有連接https連接但getUserMedia運行良好。 有必要這麼寫:

var https = require('https'); 
var serv = https.createServer(serverConfig, app); 
+0

哪些服務器端的WebSocket庫您使用? – jfriend00

+0

是:https://github.com/websockets/ws – alex10

回答

4

變化來自:

app.listen(3000); 

到:

server.listen(3000); 

當您使用app.listen(),它會創建一個新的HTTP服務器,因此一個你連接的socket.io永遠不會啓動。要充分認識app.listen(),它的代碼如下所示:

app.listen = function(){ 
    var server = http.createServer(this); 
    return server.listen.apply(server, arguments); 
}; 

所以,你可以看到它是創造一個比一個不同的HTTP服務器,你連接你的WebSocket服務器,因此,其他一個從未啓動過。


或者,你也可以這樣做:

const server = app.listen(3000); 
const wss = new WebSocket.Server({ server:server, path: "/wr" }); 

而且,一點都沒有建立自己的HTTP服務器。 app.listen()返回它創建的新服務器對象。

+0

我代替: 'app.listen(3000);' 到: 'server.listen(3000);'但仍然沒有連接 – alex10

+1

@ alex10 - 然後你需要做一些故障排除/調試。在Chrome瀏覽器中,查看調試器中的網絡選項卡,並在加載頁面時查看客戶端發生的情況。特別是,您將尋找嘗試在webSocket上連接並查看返回(或不返回)的內容。如果你不知道如何在頁面加載時打開Chrome調試器,那麼谷歌和你應該找到關於如何做到這一點的大量信息。你會希望網絡標籤能夠看到你的webSocket連接發生了什麼。 – jfriend00

+0

我發現有什麼問題。在寫完的事情結束時,問題很奇怪。 – alex10

1

只要確保你使用server.listen()。其餘部分的代碼本身說話

var express   = require('express'), 
 
    app    = express(), 
 
    http   = require('http'), 
 
    server   = http.createServer(app), 
 
    WebSocketServer = require('ws').Server, 
 
    wss    = new WebSocketServer({ server }); 
 
    
 
    
 
    
 
app.use(express.static(__dirname)); 
 
    
 
server.listen(process.env.PORT || 3000, function() { // 
 
console.log("Node server is running on http://localhost:3000/"); }); 
 
    
 
wss.on('connection', function (ws) { 
 
    //console.log("New connection."); 
 
    ws.on('message', function (message) { 
 
     //console.log("Message received:", message); 
 
    });

相關問題