【问题标题】:Node.js with express and websocket giving error during WebSocket handshake: Unexpected response code: 200在 WebSocket 握手期间带有 express 和 websocket 的 Node.js 给出错误:意外的响应代码:200
【发布时间】:2019-04-28 08:52:24
【问题描述】:

所以我正在尝试建立一个网站,该网站也有 websocket,其中 http-server 和 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-server 吗?

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

【问题讨论】:

    标签: javascript node.js express websocket


    【解决方案1】:

    您将一个 Express 应用实例作为 server 传递,它应该是一个 HTTP/HTTPS 服务器实例。此类实例由app.listen返回:

    var app = express();
    var server = app.listen(8080, function(){
        console.log('app started');
    });
    
    wss = new WebSocket.Server({server : server}); 
    

    【讨论】:

      【解决方案2】:

      我在 Windows 机器上遇到了这个问题,发现原因是 IIS 没有打开 WebSocket 协议。确保机器上的 IIS 支持 WebSocket: 控制面板 -> 程序和功能 -> 打开或关闭 Windows 功能。 展开 Internet Information Services,展开 World Wide Web Services,展开 Application Development Features,然后确保选中 WebSocket Protocol

      【讨论】:

      • 非常感谢,这实际上解决了我的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      相关资源
      最近更新 更多