Javascript 新协议握手中的数据编码hybi-10
我正在使用一个用于python和Javascript的WebSocket,到目前为止,用于Google Chrome的握手协议是。我猜谷歌Chrome最近把协议改成了 所以今天我更新了握手代码,现在WebSocket成功创建并打开了。在JavaScript中的onopen事件中,我发送了一条简单的文本消息:Javascript 新协议握手中的数据编码hybi-10,javascript,python,google-chrome,websocket,Javascript,Python,Google Chrome,Websocket,我正在使用一个用于python和Javascript的WebSocket,到目前为止,用于Google Chrome的握手协议是。我猜谷歌Chrome最近把协议改成了 所以今天我更新了握手代码,现在WebSocket成功创建并打开了。在JavaScript中的onopen事件中,我发送了一条简单的文本消息: viz.ws = new WebSocket("ws://127.0.0.1:5500"); viz.ws.onopen = function() { viz.ws.send("T
viz.ws = new WebSocket("ws://127.0.0.1:5500");
viz.ws.onopen = function() {
viz.ws.send("TEST\n");
};
我的Python服务器接收这些数据。但是,它是以某种方式编码的,我无法获取我发送的简单文本“TEST\n”
:
def recv_data(self, client, count):
try:
data = client.recv(count)
except:
return False
print data
print data.decode('utf-8','ignore')
return data.decode('utf-8', 'ignore')
打印返回以下内容:
üàÍu┬¯é0æ║▄
u0
它们总是不同的,但发送的文本总是TEST\n
此外,服务器接收这些数据,但客户端没有接收到从服务器发送的任何数据
我听说hybi-10使用二进制文件。。。代码中是否缺少数据转换?很抱歉,我对WebSocket非常陌生,这些协议让我头脑混乱……在HyBi中构建数据的方式(HyBi-00实际上是Hixie-76)发生了重大变化。中介绍了新的帧格式 此外,对于从客户机发送到服务器的数据,数据为。掩码是帧有效载荷的前4个字节,并使用以下简单算法就地解码(和编码):
data[i] = data[i] XOR mask[j MOD 4]
每个帧的掩码键都不同,这就是为什么即使发送相同的数据,每次也会得到不同的有效负载
如果客户端没有接收到您发送的数据,则很可能是您没有正确地构建数据。另外请注意,Chrome14和Firefox6/7还不支持二进制数据,因此操作码必须为1才能表示文本(UTF-8)帧 我回答了一个关于在hybi-10中解码消息的类似问题;也许会有帮助。顺便说一句,Chrome14改为hybi-08(几乎是hybi-10),稳定版本最近刚刚改为14。Chrome 15将支持二进制帧。谢谢,我认为这会有很大帮助!=)我刚刚有一个有很多WebSocket的项目,使用Twisted和txwebsocket。hybi-10和Hixie-76都使用各自的Chrome版本。如果你想要一个替代品,你可以试试。我会看看的。谢谢;)谢谢我会调查的。这真的很无聊,因为我正在尝试制作一个跨浏览器的应用程序。。。首先是mozilla和mozWebSocket,现在是:P。非常感谢您的指示!kanaka,我尝试使用您的实现来解决这个问题(使用decode_-hybi和encode_-hybi函数),现在我成功地解码了从客户端接收到的数据,然后对数据进行编码以发送到客户端(使用encode_-hybi函数),但不知怎的,数据从未收到。。我真的看不出有什么不对,我使用的正是您的代码(对于文本帧,opcode=1)。你能帮我弄清楚吗?@Neuza。很抱歉迟了答复。我建议打开一个新问题,发布代码的相关部分,然后在这里发布一个新问题的链接,以便我得到通知。嘿,没问题。我想出来了。我无法发送帧,但问题在于握手。我不知道如何接收帧并建立连接,但现在通过握手,一切正常。感谢您的回复:)