python socketserver监听多端口多进程
多进程监听多端口
# 多线程socket
# 程序监听两个端口,端口逻辑相同其中一个端口放在子进程下
# 每次请求会在产生一个进程处理请求
import SocketServer
from multiprocessing import Process
class MyServer(SocketServer.BaseRequestHandler):
def handle(self):
conn=self.request
conn.sendall('hello')
while True:
data=str(conn.recv(1024))
conn.sendall('server:'+data)
if __name__ == '__main__':
server1=SocketServer.ForkingTCPServer(('127.0.0.1',8000),MyServer)
server1.max_children=2
server2 = SocketServer.ForkingTCPServer(('127.0.0.1', 9000), MyServer)
server2.max_children = 2
p=Process(target=server2.serve_forever,args=())
p.start()
# server1需放在p.start后启动不然会阻塞进程,server2无法启动
server1.serve_forever()
p.join()
# print 'hah'
多线程把ForkingTCPServer换成ThreadingTCPServer去掉max_children配置即可
注:
坑! 若使用多线程,因为无法配置线程数,并发太高会导致服务器产生很多进程也许会达到服务器显示的单个用户最多进程数,从而导致异常(linux 默认普通用户限制1024)
client
import socket
ip=('127.0.0.1',8000)
sk=socket.socket()
sk.connect(ip)
sk.settimeout(10)
while True:
data=sk.recv(1024)
print('receive: %s',data)
inp=raw_input('please input:')
sk.sendall(bytes(inp))
if inp == 'exit':
break
sk.close()