http - 哪种服务器类型最适合 "validation server"?

标签 http tcp udp twisted

<分区>

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

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

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

我一直在看:

  • 扭曲
  • UDP 或 TCP 套接字
  • HTTP 请求

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

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

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

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

谢谢!

最佳答案

据我所知,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 在本质上兼容的同时满足了这一点。扭曲,恕我直言,情况有点复杂。

关于http - 哪种服务器类型最适合 "validation server"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056664/

相关文章:

javascript - AJAX 不处理 302 重定向

linux - 向 255.255.255.255 广播 UDP 数据包

java - 为 C++ 服务器实现 Java TCP 客户端

c# - TCP 套接字/NetworkStream 意外失败

python - 无法使用 python 将 UDP 数据包发送到本地端口,根据 WireShark 校验和失败

sockets - UDP 数据包可以像 TCP 一样部分发送吗?

android - 如何在 android 中进行 HTTPS 流式传输?

http - tcp 和 http 连接监听器是否可以相互交互?

java - 无法将 "POST"请求设置为 HttpURLConnection 对象

c - 使用 libevent 在 C 中实现 TCP 端口事件回调