擅长:python、mysql、java
<p>我相信有了处理程序代码,您就能够在服务器上接收客户机发送的数据,也能够将一些数据从处理程序发送回客户机?您一定知道,除非有一个客户机连接到服务器,否则服务器不能将任何数据发送回去?你知道吗</p>
<p>现在,要从“另一个”线程向客户机(或多个客户机)发送数据,您需要一种方法使处理程序对象或客户机套接字(在处理程序对象内可用为<code>self.request</code>)对“另一个”线程可用。你知道吗</p>
<p>一种方法是重写<code>def __init__(self, request, client_address, server):</code>方法并将<code>this</code>对象的引用保存在全局列表中。记住在重写的<strong>init的最后一行执行以下操作</strong>-</p>
<pre><code># BaseRequestHandler __init__ must be the last statement as all request processing happens in this method
socketserver.BaseRequestHandler.__init__(self, request, client_address, server)
</code></pre>
<p>一旦全局列表中有了所有客户机处理程序,就可以根据需要从任何线程轻松地向所有客户机写入数据。您必须阅读有关同步(锁)的内容,并理解从多个线程使用同一对象/套接字可能会给应用程序带来一些逻辑/数据问题。你知道吗</p>
<p>另一件您必须担心的事情和代码是,每当客户机关闭连接时,都要清理这个全局列表。你知道吗</p>