这是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
中进行了测试而且Mozilla
在没有https
连接的情况下无法连接getUserMedia
1}}运行正常。
有必要这样写:
var https = require('https');
var serv = https.createServer(serverConfig, app);
答案 0 :(得分:6)
更改自:
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()
返回它创建的新服务器对象。
答案 1 :(得分: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);
});