我想弄清楚如何让一台服务器可以同时接受多个客户端。在这样做的时候,我需要客户端能够同时发送和接收来自服务器的数据。同时发送/接收来自服务器的信息,在Python中?
我需要制作一个线程服务器吗?并有一个线程来监听数据。
然后再发送信息给客户端的另一个线程?
然后对于客户端,我是否需要使用线程来发送/获取信息?
我想弄清楚如何让一台服务器可以同时接受多个客户端。在这样做的时候,我需要客户端能够同时发送和接收来自服务器的数据。同时发送/接收来自服务器的信息,在Python中?
我需要制作一个线程服务器吗?并有一个线程来监听数据。
然后再发送信息给客户端的另一个线程?
然后对于客户端,我是否需要使用线程来发送/获取信息?
使用异步IO。 python有十几个异步IO套接字库。 Here是一个简短的基准。我还测试了gevent
,eventlet
,asyncore
,twisted
,pyev
,pycurl
,tornado
。
不要在Python中使用线程,除非你真的知道你在做什么。 Python和线程不是真正的大朋友(除非版本号< 3.2在3.2中必须有一个新的gil)。
在服务器端,您显然需要一个Socket Server。该服务器为每个传入的客户端连接创建一个新线程。
一旦建立连接,客户端和被实例化的通信线程需要额外的线程,如果他们需要做的其他业务并行比听插座如果通信是同步的。如果您需要异步通信,那么Python提供了非常好的Asynchronous Socket Handler。
对于客户端或服务器都不需要线程;您可以改为选择()来复用单个线程内的所有I/O。
那么线程不需要,然后在异步服务器上? –
这是绝对需要的。但是,它可以封装在一个库或框架中,例如Socket Server,这样就不需要直接处理线程对象。 – Santa
我会将Socket服务器导入异步?然后,我会从Socket服务器上使用什么? –