带有express和websocket的Node.js在WebSocket握手期间给出错误:意外的响应代码:200

时间:2018-11-26 16:54:10

标签: javascript node.js express websocket

因此,我正在尝试建立一个也具有websocket的网站,其中http服务器和websocket都在同一端口上侦听:

const WebSocket = require('ws');
var express = require('express');
var app = express();


wss = new WebSocket.Server({server : app});

app.get('/', function(req, res){

    res.send('hello world!');
});


wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.send('some text');
});


app.listen(8080, function(){

    console.log('app started');
});

如果我随后在chrome浏览器中加载服务器网站,我会被打招呼:“ hello world!”。到目前为止,一切都很好。但是,如果我打开网络控制台并尝试与之连接

var exampleSocket = new WebSocket("ws://192.10.10.30:8080");

我收到以下错误消息:

  

与'ws://192.10.10.30:8080 /'的WebSocket连接失败:错误   WebSocket握手期间:意外的响应代码:200

我的第一个想法是,我必须显式声明一个http服务器吗?

但是我读了这篇文章 Serve WebSocket and HTTP server at same address on Node.js,并且没有明确声明http服务器。请帮我。

2 个答案:

答案 0 :(得分:1)

您要以server的形式传递Express应用程序实例,该实例应该是HTTP / HTTPS服务器实例。这样的实例由app.listen返回:

var app = express();
var server = app.listen(8080, function(){
    console.log('app started');
});

wss = new WebSocket.Server({server : server}); 

答案 1 :(得分:0)

我在 Windows 机器上遇到了这个问题,发现原因是 IIS 没有打开 WebSocket 协议。确保机器上的 IIS 支持 WebSocket: 控制面板 -> 程序和功能 -> 打开或关闭 Windows 功能。 展开 Internet 信息服务、展开万维网服务、展开应用程序开发功能,然后确保选中 WebSocket 协议