2012-06-15 34 views
2

我正在写一个服务器和客户端系统在python中。系统的目的是检查客户是否在线。什么样的服务器类型最适合“验证服务器”?

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

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

我一直在寻找:

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

我还没有下定了决心,如果服务器将回复客户的请求呢。如果确实回复了,那么只能确保客户程序已经“签入”。这似乎有点多余,但。

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

所以在最后,我有两个问题:

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

谢谢!

+1

如果你的问题更具体,并且你包含了一个代码示例,它有一些你正试图解决的具体问题,这将会有所帮助。 – Glyph

+0

定义'在线'。这个概念在TCP/IP中没有意义。 – EJP

回答

1

据我所知,这是公认的不好,Twisted只是一个实施协议的框架。你可以实现HTTP WITH扭曲,它不是一个替代TO http。

for 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服务,或者“低”wget和cron在* nix上。(注意:没有任何反对wget或cron的东西,它们是我最喜欢的东西)

如果你需要超轻量级,就像嵌入在设备中的arm(或更少)处理器,UDP可能是一个体面的答案,但如果登记入住至关重要,你必须找出一些更可靠的方法。对接收到的数据进行基本校验和的简单ACK响应可以起作用并且易于实现。

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

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

只记得:KISS。 http满足了这一点,而天生兼容。扭曲的,恕我直言,情况有点复杂。

+0

我的意思是说,像你说的那样,使用twisted来实现HTTP或其他协议如TCP或UDP,而不是直接用socket模块或httplib来实现它们。 你会推荐我使用一个web框架像烧瓶或django来实现HTTP?或者一些内置的python库? 您推荐哪些服务器和客户端工具集用于HTTP? 感谢您的惊人回应。 我真的很感激它。 谢谢! –

+0

对于服务器端,我绝对不会重新实现http。我不是Python开发人员,但我会调查任何python解释器与Apache,lighttpd或nginx Web服务器([WSGI](http://goo.gl/WLhus)?)并写一个处理程序('/checkin'部分)来处理HTTP GET。客户端,这取决于你的底层平台,以及有什么可用的,但是因为你需要很少的“智能”,所以我会使用我能找到的最基本的python扩展,可能是内置的扩展。 会给你双方的python。没有额外的框架需要。 – Hoostine