node.js - 如何使用 Node.js 创建自定义对象

标签 node.js socket.io

我有一个基于 java 的服务器,允许客户端应用程序通过其他编程语言(java、unity、obj-c)进行连接。我想知道如何使用node.js 和socket.io 将javascript 添加到此列表。服务器监听设定的端口并接受简单的 json 数据以及以字节为单位的长度 int,它以相同的格式响应。 “数据包”的格式如下:

first four bytes are the length
00 00 00 1c

remaining bytes are the data
7b 22 69 64 22 3a 31 2c 22 6e 61 6d 65 22 3a 22 73 6f 6d 65 77 69 64 67 65 74 22 7d

数据通过 TCP 发送并以小端编码。源自 Java 的对象建模如下:

public class Widget {
    private int id;
    private String name;
    public int getId() { return id; }
    public String getName() { return name; }
}

JSON 为:

{"id":1,"name":"somewidget"}

最佳答案

您将需要一个 TCP 套接字。将其连接到服务并监听数据事件。当数据事件被触发时,查看缓冲区长度。如果它 <= 4 字节,您可能应该丢弃它*。否则使用 readUInt32() 读取前 4 个字节,并将“little”指定为字节序。然后使用该数字作为剩余缓冲区的长度。如果缓冲区短于给定长度,则仅“读取”剩余长度,否则“读取”给定长度。为此,请使用 toString 方法。您将获得一个可以使用 JSON.parse 方法进行解析的字符串,该方法将返回与 JSON 匹配的 JavaScript 对象。

您可以通过实例化缓冲区并将所有数据写入其中来以基本相同的方式构建数据包。

另请参阅Buffersnet有关详细信息的文档。

* 我不知道 Node 何时触发其数据事件,但您的数据可能会收到碎片(分成多个数据事件)。这种情况可能发生,并且由于 tcp 协议(protocol)的流式传输性质,如果 JSON 字符串足够长而无法放入单个帧,则很可能会发生这种情况。在这种情况下,您可能不应该简单地丢弃缓冲区,而应该尝试重新组装碎片数据。

关于node.js - 如何使用 Node.js 创建自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7033501/

相关文章:

node.js - AngularJS + Socket.IO - 如何更新模型?

node.js - 服务器上的 Three.js 和 Node.js - 如何加载纹理?

mysql - 获取重复的sql结果

node.js - 无法向目标套接字 ID 发送私有(private)消息

javascript - 在 Node js 中的 Socket.io 中为特定用户发出事件

javascript - Webpack 别名指向未配置 webpack 的父目录

javascript - 将这个单人游戏转换为多人游戏

node.js - NodeJS 的 Google api

多核或单核上的多个 Node 实例上的 Node.js 集群模块

使用 pgrep 时 Node.js 命令出现错误