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加密解密部分的代码囫囵吞枣,不知其详,希望谁能消化并简化之
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
库的功能范围。