我有一个Node.js服务器运行在Docker容器内.我试图从Web浏览器使用WebSockets连接到服务器,但一旦建立连接,我得到一个错误:
WebSocket connection to 'wss://domain/api/websockets' failed: One or more reserved bits are on: reserved1 = 1, reserved2 = 0, reserved3 = 0.
我访问了Docker容器,并try 使用
wscat --header "Cookie:connect.sid=session-key" -c ws://127.0.0.1:5200/api/websockets
但是得到了一个错误:
error: Invalid WebSocket frame: RSV1 must be clear
我应该注意的是,在初始连接期间,我从服务器收到了有效的数据包,但不久之后,连接中断并出现了上述错误.
下面是服务器的代码:
import WebSocket, { WebSocketServer } from "ws";
import { Server } from "http";
import { sessionParser } from "../passport";
import { User } from "../../share-types";
import { events, EventsList } from "./events";
export default async (server: Server) => {
const wsServer = new WebSocketServer({
noServer: true,
path: '/api/websockets',
});
server.on('upgrade', (request: Express.Request, socket, head) => {
sessionParser(request, {}, () => {
const user: User = request.session?.passport?.user;
if (!user?.ID) return socket.destroy();
wsServer.handleUpgrade(request as any, socket, head, (ws) => {
wsServer.emit('connection', ws, request, user);
});
})
});
wsServer.on('connection', function (socket: WebSocket, request: Express.Request, user: User) {
socket.on('error', console.error);
socket.on('message', function (message) {
try {
message = JSON.parse(message.toString());
events.emit(EventsList.NEW_WEB_SOCKET_MESSAGE, { user, message });
} catch { }
});
});
return wsServer;
};
WS包版本: "ws":"^8.16.0"
有什么问题?