【发布时间】:2012-01-01 22:25:15
【问题描述】:
我正在尝试在 node.js 中设置 websocket 服务器,但遇到了问题。我在 stackoverflow 上找到了一些代码,这是我现在拥有的服务器代码:
var net = require("net"), crypto = require("crypto"), users = [];
net.createServer(function(socket) {
this.name = "Anonymous";
users.push(socket);
socket.on('data', function(buffer) {
if(buffer.toString('utf-8').substring(0, 14) === "GET / HTTP/1.1") {
this.securyPattern = /Sec-WebSocket-Key: (.*)/g;
this.key = this.securyPattern.exec(buffer);
this.magic = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
this.sha1 = crypto.createHash("sha1");
this.sha1.update(this.key[1] + this.magic);
this.accept = this.sha1.digest("base64");
socket.write("HTTP/1.1 101 Switching Protocols\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + this.accept + "\r\n\r\n");
} else {
console.log(buffer);
console.log(buffer.toString('utf-8'));
}
});
socket.on('end', function() {
users.splice(users.indexOf(socket), 1);
});
}).listen(1337);
在连接时一切正常,并且 users.length 会在发生这种情况以及有人断开连接时更新。
问题是我不知道如何读取除了标题(纯文本)之外的消息,所以我必须打印缓冲区和 buffer.toString('utf-8') 的行只打印二进制不同的东西一直以来,例如“你好”这个词:
<Buffer 81 85 71 dc c1 02 19 b9 ad 6e 1e>
??q??☻↓??n▲
<Buffer 81 85 8e 8f 0f a2 e6 ea 63 ce e1>
????☼???c??
我正在使用 Chrome 16 发送这个“你好”: myWebSocket.send("你好");其中 myWebSocket 是 WebSocket 对象。
那么我如何使用这个来读取和写入消息到套接字?
【问题讨论】:
-
不要自己尝试。使用 socket.io,它有一个很好的 API,可以在服务器和浏览器之间进行实时消息传递,并且在浏览器太笨的情况下还有很多备用方案(flashsockets、长轮询……)。
-
我一直在寻找如何使用它,但我找不到下载链接,我想我发现它不适用于 Windows,你知道是吗?
-
它应该可以在 Windows 上运行。你应该用 npm 安装它。