一個簡單的基於多進程實現併發的Socket程序

  在單進程的socket的程序的基礎上,實現多進程併發效果的思路具體是:在server端開啓「連接循環」,每創建一次連接就生成一個Process對象進行server-client的互動,而client端不用作任何變化,由於對於client來講每運行一次程序就至關於與server端創建了一個連接。併發

  具體代碼以下:socket

# -*- coding: utf-8  -*-
# -*- Author: WangHW -*-
import socket
import os
from multiprocessing import Process

#多進程開啓的程序
def talk(conn):
    # 通訊循環
    while 1:
        try:
            data = conn.recv(1024)
            if not data:
                break
            print('client <%s> data:%s' %(os.getpid(),data.decode('utf-8')))
            conn.send(data.upper())
        except ConnectionResetError:
            break
    conn.close()

#socket創建鏈接循環的程序
def server(ip,port):
    whw_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    whw_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    whw_server.bind((ip,port))
    whw_server.listen(5)
    # 連接循環
    while 1:
        conn, addr = whw_server.accept()
        #生成對象,每創建一個連接就啓動一個進程
        p = Process(target=talk,args=(conn,))
        p.start()


if __name__ == '__main__':
    server('127.0.0.1',9000)
Server.py
# -*- coding: utf-8  -*-
# -*- Author: WangHW -*-
import socket

whw_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
whw_client.connect(('127.0.0.1',9000))

while 1:
    msg = input('>>>:').strip()
    if not msg:
        continue
    whw_client.send(msg.encode('utf-8'))
    data = whw_client.recv(1024)
    print('Server Data:',data.decode('utf-8'))
Client.py

  運行效果以下:ide

  如上圖所示:咱們能夠看到不一樣進程(由ID標識)的client與server的交互過程~spa

相關文章
相關標籤/搜索