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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5794334/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-25 18:21:56  来源:igfitidea点击:

How would I send and receive packets over a WebSocket in Javascript

javascriptwebsocket

提问by Chad Johnson

I want to send data from Javascript to a WebSocket serverand also from a WebSocket server to Javascript.

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

I want to send this:

我想发送这个:

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

From Javascript, I can send a two-byte value via

从 Javascript,我可以通过发送一个两字节的值

socket = new WebSocket(host);
...
socket.send(0xEF);

But I want to send multiple fields, together...let's say 0xEF, 0x60, and 0x0042.

但我想发送多个领域,一起...让我们说0xEF,0x60的,和0x0042。

How do I do this?

我该怎么做呢?

And, how to I interpret via Javascript data containing multiple fields coming from the WebSocket server?

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

回答by Van Coding

You can send data as a string. For example:

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

socket.send("hello world");

I recommend you to use JSON as data format. You can convert JSON strings directly into objects and vice versa. It's so simple and useful!

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

回答by Konga Raju

You can send data as JSON objects.

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

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

回答by kanaka

Sound like what you are asking is how to send binary data over a WebSocket connection.

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

This is largely answered here: Send and receive binary data over web sockets in Javascript?

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

A bit of extra info not covered in that answer:

该答案中未涵盖的一些额外信息:

The current WebSocket protocol and API only permits strings to be sent (or anything that can be coerced/type-cast to a string) and received messages are strings. The next iteration of the protocol (HyBi-07) supports binary data is currently being implemented in browsers.

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

Javascript strings are UTF-16 which is 2 bytes for every character internally. The current WebSockets payload is limited to UTF-8. In UTF-8 character values below 128 take 1 byte to encode. Values 128 and above take 2 or more bytes to encode. When you send a Javascript string, it gets converted from UTF-16 to UTF-8. To send and receive binary data (until the protocol and API natively support it), you need to encode your data into something compatible with UTF-8. For example, base64. This is covered in more detail in the answer linked above.

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