【发布时间】:2014-11-14 12:42:19
【问题描述】:
我有一个 Message 类,可以在数据通过网络时进行序列化,我目前使用 JSON,主要是因为我对所有内容都使用 JSON。 (网络服务、套接字)。
我想改进序列化以使其尽可能好,我相信这里可以改进。
目的是使传输字符串更轻,尤其是在用于套接字(视频游戏)时,因为它将用于一切、每个响应客户端/服务器或服务器/客户端,甚至内部服务器或客户端方法,这是提供数据的常用方法。
Message 是一个复杂的对象,它还可以包含其他对象实例,例如 MessageLang,它将负责根据代码在客户端翻译句子。
到目前为止一切正常,结果如下:
Socket 服务器使用简单字符串发出:
verbose: websocket writing 5:::{"name":"user.newAuthenticated","args":["Respond to emitter"]}
Socket 服务器发出简单的消息实例:
verbose: websocket writing 5:::{"name":"user.newAuthenticated","args":["{\"m\":\"Respond to all clients\",\"d\":{},\"s\":1,\"t\":\"m\"}"]}
带有复杂消息实例的套接字服务器发出:
verbose: websocket writing 5:::{"name":"user.newAuthenticated","args":["{\"m\":{\"m\":\"__12\",\"a\":{\"field\":\"name\",\"min\":3,\"max\":20}},\"d\":{\"key\":\"fakeKey\"},\"s\":1,\"t\":\"m\"}"]}
复杂的消息将呈现以下句子:
名称的最小长度为 3。最大长度为 20。 并且将在 data 中包含 key: "fakeKey"。只是为了解释它是如何工作的。
如你所见,消息越来越大,这是正常的,但我想知道我可以做些什么来更好地序列化:
- 没有(空)时删除消息本身
- 数据为空时也删除
- 状态为假时删除(因为是默认值)
- 我在套接字日志中看到 很多
\,因为它是 JSON,我相信这是一个问题,因为每次我添加一些东西时,我都会得到额外的字符不想。也许 JSON 不是一个好的选择,我应该以不同的方式序列化,首先在 JSON 中,如顶部的示例,然后在其他东西中,也许是二进制,如果它占用更少的空间。
你怎么看?
如果以某种方式加密另一种格式的消息是个好主意,那么加密的成本是否值得?因为加密它也需要一些时间,所以我只是想知道它是否不会仅仅移动问题,就像通过套接字发送消息所需的时间更少,因为它会更轻,但我们会使用更多的时间来加密它。只是想知道。
【问题讨论】:
-
我在示例中没有看到
data或status。 -
分别在
d和s有序列化。m表示message。
标签: javascript json sockets serialization