繁体   English   中英

同时在python中从服务器发送/接收信息?

[英]simultaneously sending/receiving info from a server, in python?

我试图弄清楚如何使一台服务器可以一次接受多个客户端。 这样做时,我需要客户端能够同时从服务器发送和接收数据。

我需要制作线程服务器吗? 并且有一个线程来监听数据。

然后是另一个向客户端发送信息的线程?

然后对于客户端,我是否需要使用线程来发送/获取信息?

使用异步IO。 有许多用于python的异步IO套接字库。 是一个简短的基准。 我还测试了geventeventletasyncoretwistedpyevpycurltornado

  • Twsited
    是稳定的,但最慢,也不容易开始。
  • gevent,eventlet(libevent)
    易于启动且速度快(代码看起来像阻塞),但分叉方面存在一些问题。
  • pycurl(libcurl)
    方便快捷(如果您可以做标志魔术的话。。但也有示例),但是只有http。
  • pyev(libev)
    您必须了解自己在做什么,就像在轮询自己一样。
  • 龙卷风(在python中轮询)
    速度足够快,我觉得很稳定,也很容易上手。
  • asyncore
    真的很快..但不要使用..它太丑陋了。

除非您真的知道自己在做什么,否则不要在python中使用线程。 Python和线程并不是真正的大朋友(除非3.2中的<3.2版本必须有新的gil)。

在服务器端,您显然需要Socket Server 该服务器为每个传入的客户端连接创建一个新线程。

建立连接后,如果客户端和为通信实例化的线程都必须并行执行其他事务,而不是在同步通信时侦听套接字,则它们都需要一个额外的线程。 如果需要异步通信,那么Python提供了一个出色的Asynchronous Socket Handler

使用异步套接字。 例如服务器可以发现这里和客户端代码在这里 没有直接麻烦的线程。 根据您的需求,您可能不需要异步客户端。

您不需要客户端或服务器的线程。 您可以改为select()在单个线程中多路复用所有I / O。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM