两个服务器应如何通信

时间:2013-03-01 16:04:33

标签: http messagepack

对于一个新项目,我需要在Python中设计一个多组件后端。最初,它将有两个基本组件 - 业务规则服务器和前端,它将为来自浏览器的请求提供服务。

|--------------------|
     Business API
|--------------------|
         ||
         ||
         ||
|--------------------|
    Front server
|--------------------|

随着此系统获得更多功能,我可能需要添加更多连接到Business API的服务器/组件。

现在,我(经过大量研究后)决定使用MessagePack进行序列化/反序列化。

我无法决定的是应该进行通信的传输(有线协议)。有一些选择:

  • 原始TCP / IP套接字
  • zeromq套接字(zerorpc
  • 普通HTTP

我认为http是一个不错的选择 - 但是我应该如何通过http发送有效载荷?通过做base64编码?在这种情况下,我必须这样做:

on one end
[actual message] -> [msgpack encode] -> [base64 encode]

on the other end
[base64 decode] -> [msgpack decode] ->   [actual message]

在不同组件之间存在大量喋喋不休的系统中,这是否可以接受?还有更好的解决方案吗?有没有更好的方法来通过http?

注意:我不能使用普通的JSON,因为我需要传输二进制数据 - 所以序列化库将是msgpack。

1 个答案:

答案 0 :(得分:1)

这实际上取决于系统的细节。

如果您的组件在Python(或Node.js)中 all 并且所有通信都在您的网络中进行,那么您可以使用ZeroRPC。

如果您需要跨防火墙或者如果您使用更多的外来语言,您可以使用HTTP,因为Hazzit在评论HTTP中说,在HTTP文档的正文中传输二进制数据是完全可以的,或者您可以使用多部分邮政编码。