【问题标题】:How would I send and receive packets over a WebSocket in Javascript我将如何在 Javascript 中通过 WebSocket 发送和接收数据包
【发布时间】:2011-04-26 17:46:31
【问题描述】:

我想将数据从 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 数据进行解释?

【问题讨论】:

    标签: javascript websocket


    【解决方案1】:

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

    socket.send("hello world");
    

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

    【讨论】:

    • +1 表示使用 JSON 的想法,但我不确定我是否会这样做。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案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。上面链接的答案中对此进行了更详细的介绍。

      【讨论】:

      • 关于“Javascript 字符串是 UTF-16,内部每个字符 2 个字节”,你有来源吗?不取决于文件本身的编码吗?
      • @Pacerier:浏览器/javascript引擎内部对字符串的编码不依赖于Javascript源代码编码。内部字符串是 UTF-16。比您想要的更多信息:mathiasbynens.be/notes/javascript-encoding
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 2015-07-07
      • 2020-09-28
      • 1970-01-01
      • 2012-08-22
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多