一个简单的基于多进程实现并发的Socket程序
Posted 江湖乄夜雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单的基于多进程实现并发的Socket程序相关的知识,希望对你有一定的参考价值。
在单进程的socket的程序的基础上,实现多进程并发效果的思路具体是:在server端开启“链接循环”,每建立一次链接就生成一个Process对象进行server-client的互动,而client端不用做任何变化,因为对于client来说每运行一次程序就相当于与server端建立了一个链接。
具体代码如下:
# -*- 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)
# -*- 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\'))
运行效果如下:
如上图所示:我们可以看到不同进程(由ID标识)的client与server的交互过程~
以上是关于一个简单的基于多进程实现并发的Socket程序的主要内容,如果未能解决你的问题,请参考以下文章
使用多进程 实现socket tcp协议 server端的并发
进程对象的其他方法守护进程使用多进程实现 socket tcp协议 server端的并发(抢票程序)队列进程之间的通信(IPC)