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

在python中同时从服务器发送/接收信息?,python,multithreading,sockets,tcp,Python,Multithreading,Sockets,Tcp,我正试图弄清楚如何使服务器能够同时接受多个客户端。这样做时,我需要客户端能够同时从服务器发送和接收数据 我需要做一个线程服务器吗?并有一个线程用于侦听数据 然后是另一个向客户端发送信息的线程 那么对于客户端,我是否需要使用线程来发送/获取信息?在服务器端,您显然需要一个线程。此服务器为每个传入的客户端连接创建一个新线程 一旦建立了连接,客户端和为通信实例化的线程都需要一个额外的线程,如果它们必须并行执行其他业务,而不是侦听套接字(如果通信是同步的)。如果您需要异步通信,那么Python提供了一个

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

我需要做一个线程服务器吗?并有一个线程用于侦听数据

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


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

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


一旦建立了连接,客户端和为通信实例化的线程都需要一个额外的线程,如果它们必须并行执行其他业务,而不是侦听套接字(如果通信是同步的)。如果您需要异步通信,那么Python提供了一个很好的解决方案。

使用异步套接字。可以找到示例服务器和客户端代码。与线程没有直接的麻烦。根据您的需要,您可能不需要异步客户端。

使用异步IO。python有十几个异步IO套接字库。这是一个简短的基准。 我还测试了
gevent
eventlet
asyncore
twisted
pyev
pycurl
tornado

  • Twsited
    是稳定的,但最慢,也不容易开始
  • gevent,eventlet(libevent)
    易于启动且快速(代码看起来像阻塞),但在分叉方面存在一些问题
  • pycurl(libcurl)
    快速和简单(如果你可以做标志魔术..但有例子),但只有http
  • pyev(libev)
    你必须像自己一样了解自己在做什么
  • 龙卷风(python中的轮询)
    足够快,我认为稳定,也很容易启动
  • asyncore
    真的很快。。但是不要用它。。它很丑
不要在python中使用线程,除非您真的知道自己在做什么。
Python和线程并不是真正的好朋友(除非版本客户机或服务器都不需要线程;您可以选择()在一个线程内多路传输所有I/O。

那么异步服务器上不需要线程吗?这是绝对需要的。但是,它可以像套接字服务器一样封装在库或框架中,这样您就不需要直接处理线程对象了。我会将套接字服务器导入异步服务器吗?然后,您会怎么做从套接字服务器使用的ld?