我必須丟失一些非常明顯的東西,但是我無法正常工作。Node.js WebSocket服務器無法從Chrome中接收到正確的數據
握手過程正常,但只要我發送一段數據,我就不會在服務器上得到正確的數據。
服務器:
stream.on("data", function(data) {
if(!handshake) return doHandshake(); // no problems with handshake
console.log(data);
});
客戶:
ws = new WebSocket("ws://localhost:12345");
ws.onopen = function() {
ws.send(String.fromCharCode(parseInt("89", 16)));
}
我看到node.js的控制檯什麼:
<Buffer 81 82 ed 68 ae 67 2f e1>
所以關鍵是ed 68 ae 67
編碼,並將編碼數據2f e1
。使用異或解碼解碼數據似乎是c2 89
。 A c2
由於某些未知原因而被預先考慮 - 89
是正確的。
奇怪的事情發生了與其他字符,也:
ws.send(String.fromCharCode(parseInt("ab", 16)));
我得到:
<Buffer 81 82 ff 8e 45 34 3d 25>
,解碼數據c2 ab
而不是ab
。
我使用新的成幀格式(Chrome 15)和Windows版本的節點(node.exe
)。
- 這裏怎麼回事?
- 是否可以查看Chrome發送的內容,以便了解問題出在哪裏?
不,hixie-76不工作(握手已失敗)。我正在使用新的hybi-10握手,所以實際上我*必須使用Chrome 15. – pimvdb
現在我看看http://chromestatus.com,我看到它聲明'm15:二進制消息API(已計劃) '。這是否意味着我現在只能發送'普通'字符而不是任意字符? – pimvdb
您是否實現了自己的服務器?看起來您正在使用基於'stream.on()'調用的socket.io。是的,現在你只能發送文本數據,沒有二進制數據。 –