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

Posted

技术标签:

【中文标题】我将如何在 Javascript 中通过 WebSocket 发送和接收数据包【英文标题】:How would I send and receive packets over a WebSocket in Javascript 【发布时间】: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 数据进行解释?

【问题讨论】:

【参考方案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

以上是关于我将如何在 Javascript 中通过 WebSocket 发送和接收数据包的主要内容,如果未能解决你的问题,请参考以下文章

如何在浏览器中通过 Javascript 压缩图像?

如何在joomla模块中通过javascript发送输入文件类型

如何在IOS APP中通过swift/javascript登录网站

如何使用 javascript 在 woocommerce 中通过 Api Rest 添加到购物车?

如何使用 Javascript 在浏览器中通过 X-Y 坐标定位?

如何在网站中通过URL通过Javascript放置参数