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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM