websockets,express.js并且无法与服务器建立连接

ale*_*x10 0 javascript websocket node.js express

这是关于WS和的简单聊天express.js.我收到浏览器无法通过连接到服务器的错误websockets.

客户连接:

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

服务器代码:

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);
Run Code Online (Sandbox Code Playgroud)

UPD:问题是由于我正在进行聊天webrtc和测试,Mozilla并且Mozilla没有连接就无法https连接但getUserMedia运行正常.有必要这样写:

var https = require('https');
var serv = https.createServer(serverConfig, app);
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 6

改变自:

app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

至:

server.listen(3000);
Run Code Online (Sandbox Code Playgroud)

当您使用时app.listen(),它会创建一个新的http服务器,因此您连接的socket.io to永远不会启动.要完全理解app.listen(),它的代码如下所示:

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到它创建的是不同于您将webSocket服务器连接到的服务器的http服务器,因此其他的服务器从未启动过.


或者,你也可以这样做:

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

并且,根本不创建自己的http服务器. app.listen()返回它创建的新服务器对象.