python单线程下实现多个socket并发详解编程语言

先看服务端的代码

import sys 
# import socket 
import time 
import gevent 
from gevent import socket 
from gevent import monkey 
monkey.patch_all() 
#类似于python中的黑魔法,把很多模块的阻塞的变成非阻塞的,比如socket中的rece和send都变 
# 为不阻塞了 
 
 
def server(port): 
    s = socket.socket() 
    s.bind(("127.0.0.1",port)) 
    s.listen(2000) 
    while True: 
        cli,add = s.accept() 
        gevent.spawn(handle_request,cli) 
        #通过gevent的启动一个协程,把客户端的socket对象传进去 
def handle_request(s): 
    try: 
        while True: 
            data = s.recv(1024) 
            print("收到的信息:",str(data,encoding="utf-8")) 
            s.send(data) 
            if not data: 
                s.shutdown(socket.SHUT_WR) 
                #把和客户端这个链接销毁 
    except Exception as ex: 
        print(ex) 
    finally: 
        s.close() 
 
if __name__ == '__main__': 
    server(8000) 

 

在看客户端的代码,分别使用多线程和多进程实现

import socket 
import gevent 
import threading 
import multiprocessing 
''' 
ip_bind = ("127.0.0.1",8000) 
c = socket.socket() 
c.connect(ip_bind) 
while True: 
    data = input("客户端:") 
    c.send(bytes(data,encoding="utf-8")) 
    data = c.recv(1024) 
    print("服务端:",str(data,encoding="utf-8")) 
 
c.close() 
''' 
import socket 
import gevent 
ip_bind = ("127.0.0.1",8000) 
c = socket.socket() 
c.connect(ip_bind) 
def f(n): 
    while True: 
        # c.send(bytes(n,encoding="utf-8")) 
        data = str(n) 
        c.send(bytes(data,encoding="utf-8")) 
        data = c.recv(1024) 
        print("server:",str(data,encoding="utf-8")) 
    c.close() 
x = [] 
if __name__ == '__main__': 
    l = [] 
    """ 
    多线程实现并发客户端 
        for i in range(500): 
         t = threading.Thread(target=f,args=[str(i),]) 
         t.start() 
         l.append(t) 
    for t in l: 
         t.join() 
 
    """ 
    # 多进程实现并发客户端 
    for i in range(100): 
        p = multiprocessing.Process(target=f,args=[i,]) 
        p.start() 
        l.append(p) 
    for p in l: 
        p.join() 

  

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20872.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论