如何进行简单可靠的网络消息传递?
我现在正在使用套接字(sockets)来实现不同进程之间的通信。所有的程序都在同一台机器上运行,所以不会出现数据丢失,也不会遇到读取超时等问题。通常情况下,我传输的信息是一些小的数据块(比如JSON,有时是二进制数据)。现在我想实现跨机器的通信。客户端和服务器之间的连接通常是这样的:客户端告诉服务器开始处理某个任务(传递任务描述),服务器完成工作并反馈进度,客户端也可以选择在这个过程中发送一个终止消息。一旦完成,服务器会继续监听,而客户端则完全断开连接(也就是说会话结束,开始一个新任务就会开启一个新的会话)。
我该如何实现这种通信呢?我可以继续在网络上使用套接字,但我了解到这时需要添加很多错误处理,以便识别消息是否发送成功,并将这个信息以某种方式反馈给服务器。我只想要简单的 send(message, target)
,并且确保消息能够完整传输;另外还希望能收到对方断开的通知。我看到有一些库,比如zero-mq,声称可以做到这些功能,还能提供更多的功能,但我不确定是否真的需要这样的消息库。有没有什么简单易用的库可以实现基本的通信呢?
我使用的是C++和Python,并且对于库的许可证,我更倾向于BSD风格的许可证。这个库也应该相对稳定,因为通信部分并不是特别关键,我希望能够坚持使用一个解决方案。
4 个回答
0
听起来你需要一个消息队列。
有很多很多的解决方案,其中之一就是 Redis:http://redis.io
2
你可以看看 ZeroMQ。它的使用界面比纯粹的BSD套接字简单很多,而且更容易在不同的系统上使用,另外还有非常棒的文档可以参考。
2
TCP 确保所有的数据包都能送到目的地 [如果没有送到,它会自动重新发送]。所以,如果你使用它,可能会比在单台机器上花更多时间,但消息传输的正确性是有保障的。