我应该使用什么协议进行快速命令/响应交互?

时间:2009-06-21 17:48:42

标签: protocols

我需要为快速命令/响应交互设置协议。我的直觉告诉我,只需将一个简单的协议与CRLF分开,就像SMTP或POP3的工作原理一样分隔ascii字符串,如果需要保护它,可以通过SSH / SSL进行隧道传输。

虽然我可以这样做,但我更倾向于使用现有技术,因此人们可以使用友好的库而不是操作系统提供的套接字库接口。

我需要......

  • 来回传递结构化数据的命令和响应。 (XML,S表达式,不关心。)
  • 服务器无需轮询即可向客户端发送未计划通知的功能。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

如果您只是想要请求/回复,HTTP非常简单。它已经是一个请求/响应协议。客户端和服务器端在大多数语言中得到广泛实现。扩大规模是很好理解的。

使用它的最简单方法是将命令作为POST请求发送到服务器,并让服务器在响应正文中发回回复。您也可以使用自己的动词扩展HTTP,但这样可以更好地利用缓存代理和其他了解HTTP的基础架构。

如果您需要异步通知,请查看pub / sub协议(Spread,XMPP,AMQP,JMS实现或商业发布/订阅消息代理,如TibcoRV,Tibco EMS或Websphere MQ)。要选择的协议或实现取决于您正在构建的系统的可靠性,延迟和吞吐量需求。例如,当网络拥塞时,是否可以删除通知?客户端脱机时通知会发生什么情况 - 当客户端重新连接时,它们会被丢弃或排队等候。

答案 1 :(得分:1)

AMQP听起来很有希望。或者,我认为XMPP支持您想要的大部分内容,但需要相当多的开销。

也就是说,根据您要完成的任务,简单的ad hoc协议可能会更容易。

答案 2 :(得分:1)

像SNMP这样的东西怎么样?我不确定它是否与您的应用程序使用的模型完全匹配,但它同时支持异步通知和拉取(即TRAP和GET)。

答案 3 :(得分:0)

这是一个很好的问题,需要考虑大量的变量,问题只提到了一些:数据包格式,异步与同步消息传递和安全性。有很多很多人可以想到。我建议通过对7层协议栈(OSI / ISO)的描述,并问自己在这些层上需要什么,以及是否要构建该层或从其他地方获取它。 (你似乎最感兴趣的是第6层和第7层,但也提到了较低层的位。)

还要考虑这是在安全关键应用程序中还是在具有正式V& V的系统中。真正优秀,值得信赖的通信系统不易设计;另外,“动力不足”的协议会给应用程序带来很多编码负担,可以进行错误恢复。

最后,我建议看看与你类似的其他应用程序是如何完成工作的(检查开源,阅读书籍等)。美国专利局数据库等也是有用的;一个人可以通过阅读他们试图解决的沟通问题的描​​述来获得好的想法。