javascript - websockets、express.js 无法与服务器建立连接

标签 javascript node.js express websocket

这是 WS 上的简单聊天和express.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 服务器,因此另一个服务器从未启动。

<小时/>

或者,您也可以这样做:

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

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

关于javascript - websockets、express.js 无法与服务器建立连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472726/

相关文章:

arrays - 更新嵌套数组 Mongoose

javascript - 使用 navigator.camera 或纯 javascript 拍摄照片

javascript - 无法取消选中和选中单个项目

javascript - 如何在范围外更改 AngularJS 数据?

node.js - 如何将 shareJS 的文档与文件系统同步

javascript - 使用 grunt 更新我的 css 文件

javascript - NodeJS 模块加载

javascript - 排序多维数组 - 数组(不是对象)

express - GraphQL 字段的解析器未被调用

javascript - Node.js 表达静态图像服务