gpt4 book ai didi

node.js - 连接到 websocket NodeJS Express 服务器时出错

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:14 24 4
gpt4 key购买 nike

我有一个配置了 Websocket 的 Express 服务器:

/tmp/ws-test $ cat httpServer.js
const express = require('express');
const WebSocket = require('ws');

const app = express();
const port = 8080;

app.get('/', function(req, res, next) {
return res.send('Hello World!');
});

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

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

app.listen(port, function(err) {
if (err) {
throw err;
}
console.log(`listening on port ${port}!`);
});

它按预期运行:

/tmp/ws-test $ node httpServer.js
listening on port 8080!

我有一个客户:

/tmp/ws-test $ cat client.js
const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', function open() {
ws.send('something from client');
});

ws.on('message', function incoming(data) {
console.log(`received: ${data}`);
});

错误:

/tmp/ws-test $ node client.js
events.js:180
throw er; // Unhandled 'error' event
^

Error: Unexpected server response: 200
at ClientRequest.<anonymous> (/private/tmp/ws-test/node_modules/ws/lib/websocket.js:579:7)
at ClientRequest.emit (events.js:203:13)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:575:27)
at HTTPParser.parserOnHeadersComplete (_http_common.js:116:17)
at Socket.socketOnData (_http_client.js:449:22)
at Socket.emit (events.js:203:13)
at addChunk (_stream_readable.js:295:12)
at readableAddChunk (_stream_readable.js:276:11)
at Socket.Readable.push (_stream_readable.js:210:10)
at TCP.onStreamRead (internal/stream_base_commons.js:166:17)
Emitted 'error' event at:
at abortHandshake (/private/tmp/ws-test/node_modules/ws/lib/websocket.js:697:15)
at ClientRequest.<anonymous> (/private/tmp/ws-test/node_modules/ws/lib/websocket.js:579:7)
[... lines matching original stack trace ...]
at Socket.Readable.push (_stream_readable.js:210:10)

在客户端中,我还尝试使用 http 进行 Web 套接字连接。

const ws = new WebSocket('http://localhost:8080');

但它抛出了同样的错误。

为什么客户端在连接服务器时出错?

最佳答案

您应该将 http 服务器实例传递给 WebSocket.Server 构造函数,而不是 express 应用程序的实例:

const express = require('express');
const WebSocket = require('ws');
const http = require('http');

const app = express();
const port = 8080;

const server = http.createServer(app);

app.get('/', function(req, res, next) {
return res.send('Hello World!');
});

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

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

server.listen(port, function(err) {
if (err) {
throw err;
}
console.log(`listening on port ${port}!`);
});

关于node.js - 连接到 websocket NodeJS Express 服务器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60230333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com