我正在搜索很多,但我找不到任何资源通过构建自己的协议,使用TCP作为传输层。 有什么必要的步骤? 协议应该是某种设备的“控制协议”。所以我可以向设备发送命令并控制它们并获取信息。
那么如何实现自定义协议呢?是否可以发送defininig what
命令并且how
接收器对不同的命令做出反应?假设我正在使用xml
定义一些自定义命令,使用tcp通过有线/空中发送它们,并在那里有一些逻辑,它们对发送的命令作出反应并回复。这是一种可以实现“协议”的方式吗?这甚至被称为“协议”吗?
答案 0 :(得分:16)
只要您可以为通过TCP套接字发送的数据编写规范,就可以拥有自己的协议。
主要是关于定义命令和有效负载。您必须先将命令包序列化,然后才能通过TCP。如果以二进制格式打包数据包,则字节顺序是一个常见的陷阱。 XML和JSON是常见的基于文本的数据交换格式。就个人而言,我是亲JSON。
请参阅BSON,MessagePack或protobuf进行二进制序列化。它们将类型数据打包成二进制文件,因此它们比基于文本的序列化具有更好的类型检查,并且尺寸更紧凑。它们还处理字节序转换,数据包版本控制并提供各种语言的驱动程序/绑定。服务器和客户端可以用不同的语言编写。
编辑:添加了RFC示例
看到Ross Patterson的评论,我还建议阅读RFC以获取协议定义参考。 RTSP和HTTP是文字协议,RTP和媒体格式(MPEG4 AV,H-264)是二进制协议。
修改强>
Demystifying Protocols and Serialization Performance with Todd Montgomery