【发布时间】:2012-06-14 14:17:15
【问题描述】:
假设您有一个相当基本的客户端/服务器代码,其中每个客户端创建三个线程并且多个客户端可以同时连接。我希望服务器等待传入连接,一旦它开始获取连接,就运行直到没有更多线程在运行,然后退出。代码类似于下面。 (即,而不是服务器“永远服务”,我希望它在所有线程完成后退出)。
编辑:我希望服务器等待传入连接。一旦连接开始,它应该继续接受连接,直到没有线程运行,然后退出。这些联系会有些零散。
import socket
import threading
# Our thread class:
class ClientThread ( threading.Thread ):
# Override Thread's __init__ method to accept the parameters needed:
def __init__ ( self, channel, details ):
self.channel = channel
self.details = details
threading.Thread.__init__ ( self )
def run ( self ):
print 'Received connection:', self.details [ 0 ]
self.channel.send ( 'hello from server' )
for x in xrange ( 10 ):
print self.channel.recv ( 1024 )
self.channel.close()
print 'Closed connection:', self.details [ 0 ]
# Set up the server:
server = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
server.bind ( ( '', 2727 ) )
server.listen ( 5 )
# Have the server serve "forever":
while True:
channel, details = server.accept()
ClientThread ( channel, details ).start()
【问题讨论】:
-
如果服务器一直在服务,它应该如何知道在决定关闭之前它应该预期多少个连接?如果立即有 3 个连接进来,然后什么都没有,服务器可能会开始等待那个 3。但是可能会进来第四个。你是说从第一个连接进来的那一刻起,你希望服务器检测到没有更多客户端线程处于活动状态和关闭的瞬间?它总是在等待一个 100% 空闲的时刻死掉?
-
是的,确切地说,一旦空闲它就会死掉,但在此之前它应该等到第一个或两个连接进来。
标签: python multithreading sockets client