Nodejs WebSocket更新后,解决Sec-WebSocket-Key问题------>方法
Nodejs WebSocket更新后,解决Sec-WebSocket-Key问题------>方法
哎,0回复的楼主伤不起啊,好吧,简单的把我的渣技术讲一下: 上一帖思路中已经讲过了websocket的限制问题,分享一下我的解决办法:(很详细) 先装模块,npm install WebSocket-Node,如有提示请参照------>思路的内容。 下面是源代码:
var WebSocketServer = require('websocket').server;
var http = require('http');
var clients = [];
var server = http.createServer(function (request, response) {
console.log(new Date + ' Receive request for ' + request.url);
response.writeHead(404);
response.end();
});
server.listen(8080, function(){
console.log((new Date()) + ' Server is listening on port 8080');
});
wsServer = new WebSocketServer({httpServer: server, autoAcceptConnections: false});
wsServer.on('request', function(request){
var connection = request.accept('echo-protocol', request.origin);
clients.push(connection);
console.log((new Date()) + ' Connection accepted.');
connection.on('message', function(message){
console.log('Received Message: ' + message.utf8Data);
var json = JSON.stringify({ type:'message', data: message.utf8Data });
for(i = 0; i < clients.length; i++){
clients[i].sendUTF(json);
}
});
connection.on('close', function(reasonCode, description){
console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
});
});
木有别的功能,只是简单的消息转发的例子,觉得社区的那篇热帖过时了,希望大家不要再走弯路而已,应该是很简单的吧,有什么不明白,不要客气……
另外,客户端在new 对象的时候要这样: var ws = new WebSocket(“ws://localhost:8080”, ‘echo-protocol’); 不然会报错的哦~
Node.js WebSocket 更新后解决 Sec-WebSocket-Key
问题的方法
简介
在使用 Node.js 构建 WebSocket 应用时,可能会遇到一些与 WebSocket 协议相关的常见问题。其中一个典型问题是 Sec-WebSocket-Key
的处理。本文将介绍如何使用 WebSocket-Node
模块来正确处理 WebSocket 连接,并提供一个简单的消息转发示例。
安装依赖
首先,确保你已经安装了 WebSocket-Node
模块。你可以通过以下命令安装:
npm install websocket
示例代码
以下是完整的示例代码,展示了如何设置一个 WebSocket 服务器并处理连接、消息接收和关闭事件。
// 引入所需的模块
var WebSocketServer = require('websocket').server;
var http = require('http');
// 初始化客户端数组
var clients = [];
// 创建 HTTP 服务器
var server = http.createServer(function (request, response) {
console.log(new Date() + ' Received request for ' + request.url);
response.writeHead(404);
response.end();
});
server.listen(8080, function () {
console.log((new Date()) + ' Server is listening on port 8080');
});
// 创建 WebSocket 服务器
wsServer = new WebSocketServer({
httpServer: server,
autoAcceptConnections: false
});
// 处理 WebSocket 请求
wsServer.on('request', function (request) {
// 接受连接请求
var connection = request.accept('echo-protocol', request.origin);
clients.push(connection);
console.log((new Date()) + ' Connection accepted.');
// 处理接收到的消息
connection.on('message', function (message) {
console.log('Received Message: ' + message.utf8Data);
var json = JSON.stringify({ type: 'message', data: message.utf8Data });
// 将消息广播给所有连接的客户端
for (var i = 0; i < clients.length; i++) {
clients[i].sendUTF(json);
}
});
// 处理连接关闭事件
connection.on('close', function (reasonCode, description) {
console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
});
});
客户端代码
客户端需要使用正确的协议名称进行连接:
var ws = new WebSocket("ws://localhost:8080", 'echo-protocol');
ws.onopen = function () {
console.log('WebSocket connection established');
};
ws.onmessage = function (event) {
console.log('Received message: ' + event.data);
};
ws.onclose = function () {
console.log('WebSocket connection closed');
};
总结
通过上述代码,我们能够正确地处理 WebSocket 连接,包括接受连接请求、处理消息以及处理连接关闭事件。这可以帮助你避免常见的 Sec-WebSocket-Key
问题,并构建一个可靠的 WebSocket 服务器。希望这些信息对你有所帮助!
严重感谢LZ啦啦啦~~
对于Node.js中的WebSocket实现,如果你遇到了Sec-WebSocket-Key
相关的问题,这通常是由于WebSocket握手过程中的认证失败引起的。在较新的WebSocket实现中,这一部分通常由WebSocket库自动处理。下面是一个使用ws
库的简单示例,该库是当前较为流行的一个WebSocket库。
安装ws
库
首先,你需要安装ws
库:
npm install ws
示例代码
接下来是使用ws
库实现一个简单的WebSocket服务器,该服务器可以正确处理握手过程,包括Sec-WebSocket-Key
:
const WebSocket = require('ws');
// 创建HTTP服务器
const server = require('http').createServer();
// 创建WebSocket服务器,并将其绑定到HTTP服务器
const wss = new WebSocket.Server({ server });
wss.on('connection', function connection(ws) {
console.log('New client connected!');
// 当接收到消息时,将其广播给所有连接的客户端
ws.on('message', function incoming(message) {
console.log('received: %s', message);
wss.clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
// 当连接关闭时打印日志
ws.on('close', function close() {
console.log('Client disconnected');
});
});
// 监听端口
server.listen(8080, function listening() {
console.log('Listening on %d', server.address().port);
});
说明
- 安装与导入:首先,我们需要安装并导入
ws
库。 - 创建HTTP服务器:使用Node.js内置的
http
模块创建一个HTTP服务器。 - 创建WebSocket服务器:通过
WebSocket.Server
构造函数创建WebSocket服务器,并将其绑定到HTTP服务器。 - 处理连接:当新客户端连接时,我们可以在
connection
事件中处理。这里我们打印一条日志,并设置消息接收和连接关闭的监听器。 - 消息广播:每当从一个客户端接收到消息时,我们将消息广播给所有其他连接的客户端。
- 启动服务器:最后,我们让HTTP服务器监听指定端口(这里是8080)。
此代码示例展示了如何正确处理WebSocket连接和消息广播,确保Sec-WebSocket-Key
等握手过程由库自动处理。