19

我进行了很多搜索,但找不到任何通过构建使用 TCP 作为传输层的自己的协议的资源。有哪些必要的步骤?该协议应该是设备的某种“控制协议”。所以我可以向设备发送命令并控制它们并获取信息。

那么如何实现自定义协议呢?是否所有关于what可以发送定义命令和how接收者对不同命令作出反应的问题?假设我正在定义一些自定义命令xml,使用 tcp 通过有线/空中发送它们,并在那里有一些对发送的命令和回复做出反应的逻辑。这是一种可以实现“协议”的方式吗?这甚至被称为“协议”吗?

亲切的问候。

4

1 回答 1

23

只要您可以编写一个规范来定义您通过 TCP 套接字发送的数据,您就拥有了自己的协议。

它主要是关于定义命令和有效负载。您必须先序列化您的命令数据包,然后再将它们通过 TCP。如果以二进制格式打包数据包,字节序是一个常见的缺陷。XML 和 JSON 是常见的基于文本的数据交换格式。我个人是亲 JSON 的。

请参考BSONMessagePackprotobuf进行二进制序列化。它们将类型化的数据打包成二进制,因此它们通常比基于文本的序列化具有更高的性能、更紧凑的大小和更好的类型检查。它们还处理字节序转换、数据包版本控制并提供各种语言的驱动程序/绑定。服务器和客户端可以用不同的语言编写。

编辑:添加 RFC 示例

看到 Ross Patterson 的评论,我还建议阅读 RFC 以获取协议定义参考。RTSPHTTP是文本协议,RTP和媒体格式(MPEG4 AVH-264)是二进制协议。

编辑:

Todd Montgomery 揭秘协议和序列化性能

于 2013-08-15T09:42:48.027 回答