我收集了一些网站,这些网站需要发送时间敏感的消息到我的大都会地区的主机,每个主机都有自己的dynamicIP。 直到现在,我一直这样做脚本小子的方式:
每台主机运行一台FTP服务器或者一台HTTP服务器,相应的有一个由其网关打开的端口。
每台主机运行一个程序,监视某个文件夹,并在给定分机的新文件出现时自动打开或打印或执行()。 dynamicIP地址使用dynamicDNS服务。
每个网站做cURL或fsockopen或任何其他和直接与收件人根据需要。
这种方法令人惊讶地可靠,但是出现了明显的问题,需要解决这个问题。
如上所述,这些消息是时间敏感的,需要在terminal用户提交数分钟内检测到故障。 我正在做的是build立一个消息协议。 它将运行在我的控制机器和连接。 就服务而言,网站和主机之间没有区别 – 只有一个设备发送消息到另一个设备。
所以这就是我现在所处的位置。 我有一个骨架的服务器和一个骨架客户端。 他们可以谈判高质量的authentication和encryption。 (TCP)连接是持久的和asynchronous的,并且可以处理分隔的(即,直到\ r \ n或其它任何地方),以及长度前缀(即正好读取n个字节)的消息。 除非有人给我一个更好的主意,我想我会把string作为字节来处理。
所以我正在寻找如何build模协议本身的build议 – 在应用程序级别。 我将主要是传输XML和DLMtypes的文件,以及像“握手”和“是什么在线?”等控制消息。 等等。 我的思路有没有真正的愚蠢? 或者我在开始之前应该阅读的任何内容? 这样的东西 – 拜托,谢谢。
更新:
@ mrdenny's是我最终走的方法,所以他得到了答案。 @ Henrik的ZeroMQbuild议也适用,但我基本上已经编码了,切换第三方框架的代码并没有真正帮助devise应用层。 最后,我发现了HTTP的多function性是多么的令人难以置信,而且真的不需要一个自己的协议。 只要让网站提供内容types的应用程序/ json(如果需要,还可以是xml),除了他们已经在做的text / html之外,还可以让收件人发出Web请求,而不是监听和响应文件系统更新。 删除上面描述的所有“script kiddie”开销,更可靠地工作,更好的error handling,易于构build等等。
任何原因,你不能只使用networking方法和HTTP(或HTTPS)调用来传输机器之间的数据?
ZeroMQ被devise成一个asynchronous传输/消息协议。
如果您的某个节点出现故障,则会重新build立ZMQ套接字,并在到达目标端点的路由恢复时继续发送消息。 性能是好的,根据其IRC频道,现在已经足够的testing,通过广域网使用。
查看FIX(如FIX协议),看看这样一个协议是怎么样的。 你可以使用FIX和一个开源的库,并自己做所有的字段定义。 FIX用于金融交易。
但它应该给你一个体面的想法。 如果需要的话,FIX也可以处理一些项目,例如持续消息。