这是 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/