我需要建立一个用于快速命令/响应交互的协议。我的直觉告诉我只需将一个简单的协议与 CRLF 分隔的 ascii 字符串拼凑在一起,就像 SMTP 或 POP3 的工作方式一样,如果我需要保护它,则可以通过 SSH/SSL 对其进行隧道传输。

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

我需要...

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

有什么想法吗?

有帮助吗?

解决方案

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

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

其他提示

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

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

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

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

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

还要考虑这是否是安全关键型应用程序或具有正式 V&V 的系统的一部分。真正优秀、值得信赖的通信系统并不容易设计;此外,“功能不足”的协议可能会给应用程序带来大量编码负担以进行错误恢复。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top