Node.js与express和websocket握手时出错:意外的响应代码:200



所以我正在尝试建立一个网站,该网站也有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浏览器中加载服务器网站,我会收到"你好,世界!"。到目前为止还不错。但如果我打开网络控制台并尝试连接

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

我收到以下错误消息:

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

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

但我读过这篇文章在Node.js上为WebSocket和HTTP服务器提供相同地址的服务,并且并没有明确声明HTTP服务器。请帮我一下。

您正在传递一个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}); 

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

相关内容

最新更新