<分区>
我正在用 python 编写服务器和客户端系统。该系统的目的是检查客户端是否在线。
客户端会定期向中央服务器发出“签到”请求。如果服务器在指定的时间段内没有收到该请求,它将向人工发出警报。
我是网络编程的新手,所以我不确定哪种技术最适合我正在尝试做的事情。
我一直在看:
我还没有决定服务器是否会回复客户端的请求。如果它确实回复了,那么它只会向客户端程序保证它已经“ checkin ”。不过这似乎有点多余。
我倾向于 TCP 套接字服务器模型,因为它似乎是最简单可靠的解决方案。
总而言之,我有两个问题:
- 最适合我的网络的网络技术是什么?
- 建立双向连接是否有意义?还是从客户端到服务器的单向连接就足够了?
谢谢!
据我所知,Twisted 只是一个用于实现协议(protocol)的框架,这确实不太好。你可以用扭曲的方式实现 http,它不是 http 的替代品。
对于 1:
如果我这样做,并且我没有任何具体要求,那么 http(或 https)将在我的列表中名列前茅。它可以通过您想要通过的任何防火墙而无需重新配置,您将在两端使用大量工具集(服务器和应用程序开发),并且它适用于所有内容。 GET 'http://server.com/checkin?id=12345&status=OK' 之类的东西很容易。请记住,如果有任何安全问题,外人可以看到。某种基于时间+ID 的 token (想想公钥加密字符串)和 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 服务,或在 *nix 上使用“低级”wget 和 cron。 (注意:没有什么反对 wget 或 cron 的,它们是我最喜欢的东西)
如果您需要超轻量级,例如设备中嵌入的 arm(或更小的)处理器,UDP 可能是一个不错的答案,但如果 checkin 至关重要,则您必须想出一些更可靠的方法.带有接收到的数据的基本校验和的简单 ACK 响应可以工作并且很容易实现。
我刚刚实现了一个 UDP 服务器来通过蜂窝网络监听 ARM 设备,我不得不说,它并不比 UDP 简单多少。
对于 2:这实际上取决于您是否有另一种方法来确保数据已传输。使用UDP,是的,您可能希望在特定时间段内使用所述数据的校验和来确认收到数据。对于 http,它是内置的(响应代码)。
请记住:亲吻。 http 在本质上兼容的同时满足了这一点。扭曲,恕我直言,情况有点复杂。