簡體   English   中英

websockets,express.js並且無法建立與服務器的連接

[英]websockets, express.js and can’t establish a connection to the server

這是在WSexpress.js上的簡單聊天。 我收到瀏覽器無法通過websockets連接到服務器的錯誤。

客戶端連接:

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

服務器代碼:

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進行了測試,並且在沒有https連接的情況下Mozilla無法連接,但是getUserMedia運行良好。 有必要這樣寫:

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

更改自:

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);
};

因此,您可以看到它正在創建與將webSocket服務器連接到的http服務器不同的http服務器,因此從未啟動其他服務器。


或者,您也可以這樣做:

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

而且,根本不要創建自己的http服務器。 app.listen()返回它創建的新服務器對象。

只要確保您使用server.listen()。Rest代碼就可以了

  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); }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM