服务端
import socket,select,time host = "" port = 50000 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((host,port)) s.listen(5) p = select.poll() p.register(s.fileno(),select.POLLIN|select.POLLERR|select.POLLHUP) while 1: print "q" results = p.poll(5000) for fd,event in results: if event == select.POLLIN: print "a" clientsock,clientaddr = s.accept() buf = clientsock.recv(8196) print ('okey') time.sleep(10) clientsock.close() print "no data coming"
客户端
import socket,select host = "localhost" port = 50000 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) #s.send("coming from poll client") s.close()
我故意把 s.send 注释掉,也就是只连接服务端而不发送任何数据
服务端打印了 'q' 'a' 'okey'
在服务端, 我使用了 time.sleep(10) 每一个连接我都阻塞10秒
客户端我不断的连接. 结果 服务端是处理完一个到一个. 看来poll 不是很适合 开发数据库类的并发等程序. 你说万一 一个连接读表锁表了. 那下一个连接就慢慢等了...