3

我需要为快速命令/响应交互设置一个协议。我的直觉告诉我只需将一个简单的协议与 CRLF 分隔的 ascii 字符串(如 SMTP 或 POP3 的工作方式)组合在一起,并在需要保护它时通过 SSH/SSL 进行隧道传输。

虽然我可以这样做,但我更愿意在现有技术的基础上进行构建,这样人们就可以使用友好的库而不是操作系统提供的套接字库接口。

我需要...

  • 来回传递结构化数据的命令和响应。(XML、S 表达式,不用管。)
  • 服务器在不被轮询的情况下向客户端发出计划外通知的能力。

请问有什么想法吗?

4

4 回答 4

2

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

使用它的最简单方法是将命令作为 POST 请求发送到服务器,然后服务器在响应正文中发回回复。你也可以用你自己的动词来扩展 HTTP,但这会让利用缓存代理和其他可以理解 HTTP 的基础设施做更多的工作。

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

于 2009-06-21T18:35:36.383 回答
1

AMQP 听起来很有希望。或者,我认为 XMPP 支持您想要的大部分功能,尽管开销很大。

也就是说,根据您要完成的工作,一个简单的临时协议可能会更容易。

于 2009-06-21T17:54:16.763 回答
1

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

于 2009-06-21T18:22:16.810 回答
0

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

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

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

于 2013-03-08T20:49:59.567 回答