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’); 不然会报错的哦~


3 回复

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等握手过程由库自动处理。

回到顶部