2

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

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

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

我一直在看:

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

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

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

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

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

谢谢!

4

1 回答 1

1

据我了解,这当然不是很好,Twisted 只是一个用于实现协议的框架。你可以用twisted实现http,它不是http的替代品。

1:如果我这样做,并且我没有任何具体要求,那么 http(或 https)将在我的列表中很高。它可以通过您想要通过的任何防火墙而无需重新配置,您将在两端使用大量工具集(服务器和应用程序开发),并且它适用于一切。只需 GET 'http://server.com/checkin?id=12345&status=OK' 之类的就很容易了。请记住,如果担心安全问题,外人可以看到它。某种基于时间+ID 的令牌(想想公钥加密字符串)和 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 可能是一个不错的答案,但如果签入至关重要,您将不得不想出一些更可靠的方法。带有接收数据的基本校验和的简单 ACK 响应可以工作并且易于实现。

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

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

请记住:亲吻。http 在本质上兼容的同时实现了这一点。扭曲,恕我直言,这种情况有点复杂。

于 2012-06-15T19:40:09.390 回答