javascript - 在 WebSocket 握手期间带有 express 和 websocket 的 Node.js 给出错误:意外的响应代码:200
问题描述
所以我正在尝试建立一个网站,该网站也有 websockets,其中 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");
我收到以下错误消息:
WebSocket 连接到“ws://192.10.10.30:8080/”失败:WebSocket 握手期间出错:意外响应代码:200
我的第一个想法是,我是否必须明确声明 http-server ?
但是我 在 Node.js 上阅读了在同一地址上服务 WebSocket 和 HTTP 服务器的这篇文章,并且没有明确声明 http-server。请帮助我。
解决方案
您将一个 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});
推荐阅读
- c# - 如何返回字符串中重复字母的数量
- c# - JsonConfigurationSource/JsonConfigurationProvider
- amazon-web-services - 如何从 AWS EC2 跟踪 InsufficientInstanceCapacity?
- php - PHP:缺少必需的帖子参数
- laravel - 如何从数据透视表 laravel 中获取计数?
- c# - 自不可空引用以来的事件指南
- android - Flutter Release apk 无法在 Android 设备上运行或打开
- html - 在 flex 列中排列项目而不向父级提供高度
- google-cloud-platform - 将 WriteFiles 应用于无界 PCollection 时,必须明确指定输出分片的数量
- symfony - 在 prestashop 中覆盖“src”控制器后台