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

时间:2017-02-26 18:54:13

标签: javascript node.js express websocket

这是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中进行了测试而且Mozilla在没有https连接的情况下无法连接getUserMedia 1}}运行正常。 有必要这样写:

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

2 个答案:

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