如何在Javascript中通过WebSocket发送和接收数据包

时间:2011-04-26 17:46:31

标签: javascript websocket

我想将数据从Javascript发送到WebSocket服务器,并将从WebSocket服务器发送到Javascript

我想发送此信息:

Headers
-------
Field 1: 2 byte hex
Field 2: 2 byte hex
Field 3: 4 byte hex

Data
----
Field1 : 2 byte hex
Field1 : 8 byte hex

从Javascript,我可以通过

发送一个双字节值
socket = new WebSocket(host);
...
socket.send(0xEF);

但我想发送多个字段,在一起 ...让我们说0xEF,0x60和0x0042。

我该怎么做?

而且,如何通过包含来自WebSocket服务器的多个字段的Javascript数据进行解释?

3 个答案:

答案 0 :(得分:8)

您可以将数据作为字符串发送。例如:

socket.send("hello world");

我建议您使用JSON作为数据格式。您可以将JSON字符串直接转换为对象,反之亦然。它非常简单实用!

答案 1 :(得分:4)

您可以将数据作为JSON对象发送。

 socket.send(JSON.stringify({field1:'0xEF', field2:'0x60',field3: '0x0042'}));

答案 2 :(得分:3)

听起来就像你要问的是如何通过WebSocket连接发送二进制数据。

这在很大程度上得到了回答: Send and receive binary data over web sockets in Javascript?

答案中未涉及的一些额外信息:

当前的WebSocket协议和API仅允许发送字符串(或者可以强制/类型转换为字符串的任何内容),并且接收的消息是字符串。协议的下一次迭代(HyBi-07)支持二进制数据,目前正在浏览器中实现。

Javascript字符串是UTF-16,内部每个字符为2个字节。当前的WebSockets有效负载限制为UTF-8。在UTF-8字符值低于128时,需要1个字节进行编码。值128及以上需要2个或更多字节进行编码。当您发送Javascript字符串时,它将从UTF-16转换为UTF-8。要发送和接收二进制数据(直到协议和API本身支持它),您需要将数据编码为与UTF-8兼容的内容。例如,base64。在上面的答案中有更详细的介绍。