Nodejs 非常轻量级的websocket server及client套件,含flash,支持draft75/76,version8/13加密格式

Nodejs 非常轻量级的websocket server及client套件,含flash,支持draft75/76,version8/13加密格式

缘起:websocket在未来网站应用里无疑要占据重要地位,而socket.io虽然强大,但二次开发困难,庞大的构架也影响运行效率,其他一些较轻的对加密格式支持度不够全,所以,我“凭凑”出了一个自用websocket套件:

server端,借用antinode处理80端口web请求,其他websocket部分不到20k,支持draft75/76及version8/13。

client端,支持原生websocket。flash socket,用swfobject加载,加密采用draft76,那是一个6k的小文件,外面能找到的都是170k的那种。

测试:ie6,7,8, 最新的firefox, safari, chrome, opera, 360。opera要在config里开通websocket。 ie9装flsh player不成功,没做成。

所有源文件,包括flash的,都在这个压缩包里 http://hdcafe.com/ws.rar

希望得到的帮助: 找一个更简洁的webserver代替antinode 调通ie9 对version8/13加密解密部分的代码囫囵吞枣,不知其详,希望谁能消化并简化之


3 回复

Node.js 非常轻量级的 WebSocket Server 及 Client 套件

缘起

WebSocket 在未来网站应用中将扮演重要角色。尽管 Socket.IO 强大且功能全面,但其庞大的架构使得二次开发变得复杂,并可能影响性能。相比之下,一些轻量级的 WebSocket 库可能无法提供完整的加密格式支持。因此,我创建了一个轻量级的 WebSocket 套件,以满足特定需求。

Server 端

Server 端使用 Antinode 处理 HTTP 请求,而 WebSocket 部分仅占用不到 20K 的空间。该库支持 WebSocket 的 draft75、draft76 以及 version8 和 version13 版本的加密格式。

示例代码:

// 安装 antinode
const antinode = require('antinode');

// 创建一个简单的 HTTP 服务器
const http = antinode.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello World!');
});

// 创建 WebSocket 服务器
const WebSocket = require('ws');
const wss = new WebSocket.Server({ server: http });

wss.on('connection', (ws) => {
    ws.on('message', (message) => {
        console.log(`Received: ${message}`);
    });

    ws.send('Hello Client!');
});

http.listen(80, () => {
    console.log('Listening on port 80');
});

Client 端

Client 端支持原生 WebSocket API,并通过 SWFObject 加载 Flash Socket。Flash Socket 用于支持旧版浏览器(如 IE6-8),并且使用的加密文件仅为 6K,而不是常见的 170K。

示例代码:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Client</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/swfobject/2.2/swfobject.min.js"></script>
    <script>
        function createWebSocket() {
            var ws;
            if ('WebSocket' in window) {
                ws = new WebSocket('ws://localhost:80');
            } else if ('MozWebSocket' in window) {
                ws = new MozWebSocket('ws://localhost:80');
            } else {
                // 使用 Flash Socket
                swfobject.embedSWF("flashsocket.swf", "flashsocket", "100%", "100%", "9.0.0");
                ws = new WebSocket("flash://localhost:80");
            }

            ws.onopen = function() {
                console.log("Connected to WebSocket server.");
                ws.send("Hello Server!");
            };

            ws.onmessage = function(event) {
                console.log("Message from server:", event.data);
            };

            ws.onclose = function() {
                console.log("Disconnected from WebSocket server.");
            };
        }
    </script>
</head>
<body onload="createWebSocket()">
    <div id="flashsocket"></div>
</body>
</html>

测试环境

该 WebSocket 套件已在以下浏览器中进行了测试:

  • IE6, 7, 8
  • 最新版 Firefox, Safari, Chrome, Opera
  • 360 浏览器
  • Opera 需要在配置中启用 WebSocket 支持

IE9 由于 Flash Player 安装问题未能成功测试。

求助

  • 寻找更简洁的 Web 服务器替代 Antinode
  • 解决 IE9 中 Flash Player 的安装问题
  • 简化 Version8/13 加密解密的代码

所有源文件,包括 Flash 文件,都可以在这个压缩包中找到:下载链接

希望以上信息能帮助你理解和使用这个轻量级的 WebSocket 套件。


认识您很高兴,可以告知您编写flash的环境吗? flash8 还是 cs4/5 ,还是 flex 。我希望环境可以和您的一致。

针对您提到的需求,可以使用ws库来创建一个非常轻量级的WebSocket服务器和客户端。ws库支持多种WebSocket协议版本,包括draft75/76和version8/13。下面是一些基本示例代码,展示如何使用ws库创建WebSocket服务器和客户端。

WebSocket Server 示例

首先安装ws库:

npm install ws

然后创建一个简单的WebSocket服务器:

const WebSocket = require('ws');

// 创建WebSocket服务器实例
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
    console.log('A 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('A client disconnected!');
    });
});

console.log('WebSocket server is running on ws://localhost:8080');

WebSocket Client 示例

同样地,安装ws库后,可以创建一个简单的WebSocket客户端:

const WebSocket = require('ws');

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

ws.on('open', function open() {
    console.log('Connected to the server!');
    ws.send('Hello Server!');
});

ws.on('message', function incoming(data) {
    console.log('Received from server: ' + data);
});

ws.on('close', function close() {
    console.log('Disconnected from the server.');
});

解释

  • Server: 使用ws库创建了一个WebSocket服务器,监听8080端口。每当有新客户端连接时,会触发connection事件,并且为每个客户端创建一个新的WebSocket实例。

  • Client: 使用ws库连接到指定的WebSocket服务器地址(这里假设服务器运行在localhost的8080端口)。当连接建立后,客户端可以发送和接收消息。

ws库是目前Node.js中广泛使用的WebSocket库之一,它具有良好的兼容性和丰富的功能,可以满足您对不同协议版本的支持需求。对于Flash Socket的支持以及IE9等旧版浏览器的支持,通常需要额外的库或手动实现,这可能超出了ws库的功能范围。

回到顶部