哪种服务器类型最适合“验证服务器”?

时间:2012-06-15 18:59:46

标签: http tcp udp twisted

我正在用python编写服务器和客户端系统。该系统的目的是检查客户端是否在线。

客户端将定期向中央服务器发出“签入”请求。如果服务器在指定的时间段内没有收到该请求,它将提醒人。

我是网络编程的新手,所以我不确定哪种技术最适合我想做的事情。

我一直在看:

  • UDP或TCP套接字
  • HTTP请求

如果服务器还会回复客户的请求,我还没有决定。如果它确实回复了,那么它只会向客户端程序保证它已经“签入”。这似乎有点多余。

我倾向于使用TCP套接字服务器模型,因为它似乎是最简单可靠的解决方案。

总而言之,我有两个问题:

  1. 我的网络最合适的网络技术是什么?
  2. 建立双向连接是否有意义?或者从客户端到服务器的单向连接是否足够?
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

据我所知,这当然不太好,Twisted只是一个用于实现协议的框架。你可以实现http WITH twisted,它不是替代TO。

表示1: 如果我这样做,并且我没有任何具体要求,http(或https)将在我的列表中很高。它可以通过你想要通过的任何防火墙而无需重新配置,你可以在两个工具集上使用多个工具集(服务器和应用程序开发),它适用于所有事情。只需获取“http://server.com/checkin?id=12345&status=OK”之类的东西就很容易了。请记住,如果安全性有任何问题,外人可以看到。某种时间+基于身份的令牌(想想公钥加密字符串)和https可以用来阻止外人使用重播攻击。 (可能看起来像:'https://server.com/checkin?token=7d71905f039f67bedcaec2fe5ccc6783',其中十六进制字符串将在服务器上解密为'$ ID:$ STATUS:$ TIME'或类似信息。)

使用http的另一个好处是,上面的'checkin'几乎可以在任何平台上运行,从java到.net到python,perl,ruby,php等,在windows,solaris,linux的任意组合上运行, bsd,或者其他任何东西。负载平衡很简单(因为当你将数十亿美元的'SuperCheckIn'应用程序授权给所有财富1000时)并且真的没有上限和极少的下限。该设备将享有类似的软件自由,因为您可以使用花哨的自定义Windows服务,或“低”wget和cron on * nix。 (注意:没有什么可以反对wget或cron,它们是我最喜欢的东西)

如果你需要超轻量级,比如嵌入在设备中的手臂(或更小)处理器,UDP可能是一个不错的答案,但如果签到很关键,你必须找到一些更可靠的方法。一个简单的ACK响应,接收到的数据的基本校验和可以工作,并且易于实现。

刚刚实施了一个UDP服务器来通过蜂窝网络监听ARM设备,我不得不说,它并不比UDP简单得多。

for 2:这实际上取决于你是否有另一种确保数据传输的方法。使用UDP,是的,您可能希望在特定时间段内通过所述数据的校验和确认收到数据。使用http,它内置(响应代码)。

只记得:KISS。 http实现了这一点,同时具有内在的可比性。扭曲,imho,对于这种情况来说有点复杂。