python-gevent模块实现socket大并发

时间:2023-02-11 22:23:38

服务器端:gevent_server.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import  sys
import  socket
import  time
import  gevent
 
from  gevent  import  socket, monkey
 
monkey.patch_all()
 
 
def  server(port):
     =  socket.socket()
     s.bind(( '0.0.0.0' , port))
     s.listen( 500 )
     while  True :
         cli, addr  =  s.accept()
         gevent.spawn(handle_request, cli) #启动一个协程
 
 
def  handle_request(conn):
     try :
         while  True :
             data  =  conn.recv( 1024 )
             print ( "recv:" , data)
             conn.send(data)
             if  not  data:
                 conn.shutdown(socket.SHUT_WR)
 
     except  Exception as  ex:
         print (ex)
     finally :
         conn.close()
 
 
if  __name__  = =  '__main__' :
         server( 8001 )
 
 客户端:socket_client.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import  socket
 
HOST  =  'localhost'   # The remote host
PORT  =  8001   # The same port as used by the server
=  socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while  True :
     msg  =  bytes( input ( ">>:" ), encoding = "utf8" )
     s.sendall(msg)
     data  =  s.recv( 1024 )
 
     #
     print ( 'Received' , data)
s.close()
 
import  sys
import  socket
import  time
import  gevent
 
from  gevent  import  socket, monkey
 
monkey.patch_all()
 
 
def  server(port):
     =  socket.socket()
     s.bind(( '0.0.0.0' , port))
     s.listen( 500 )
     while  True :
         cli, addr  =  s.accept()
         gevent.spawn(handle_request, cli) #启动一个协程
 
 
def  handle_request(conn):
     try :
         while  True :
             data  =  conn.recv( 1024 )
             print ( "recv:" , data)
             conn.send(data)
             if  not  data:
                 conn.shutdown(socket.SHUT_WR)
 
     except  Exception as  ex:
         print (ex)
     finally :
         conn.close()
 
 
if  __name__  = =  '__main__' :
         server( 8001 )