Gevent-socket
Posted momo8238
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gevent-socket相关的知识,希望对你有一定的参考价值。
1. 通过Gevent实现单线程下的多socket并发。
server 端:
#server side import sys import socket import time import gevent from gevent import socket, monkey monkey.patch_all() def server(port): s = socket.socket() s.bind((\'0.0.0.0\', port)) s.listen(500) while True: cli, addr = s.accept() gevent.spawn(handle_request, cli) #只要过来一个请求,就起一个协程,把cli交给handle_request def handle_request(conn): #类似于socket-server里面的handler()方法,所有跟客户端的交互都在handle()里面完成。 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)
Client 端:
import socket HOST = \'localhost\' # The remote host PORT = 8001 # The same port as used by the server s = 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(data) print(\'Received\', repr(data)) #repr:格式化输出 s.close()
运行结果:实现了并发
2.
以上是关于Gevent-socket的主要内容,如果未能解决你的问题,请参考以下文章