gevent实现套接字
server-------------
#!/usr/bin/env python
# encoding: utf-8
# Date: 2018/6/17
from gevent import monkey,spawn;monkey.patch_all()
from socket import *
# 负责通信
def communicate(conn):
while True:
try:
data = conn.recv(1024)
if not data: break
conn.send(data.upper())
except ConnectionResetError:
break
conn.close()
# 建立链接
def server(ip, port):
server = socket(AF_INET, SOCK_STREAM)
server.bind((ip, port))
server.listen(5)
while True:
conn, addr = server.accept()
spawn(communicate, conn) # 启动协程,这里不需要join,因为这里提交完,线程不会结束
server.close()
if __name__ == '__main__':
g = spawn(server, '127.0.0.1', 8080)
g.join()
client------------
#!/usr/bin/env python
# encoding: utf-8
# Date: 2018/6/17
# 客户端可以启动多个进程,启动一个就是一个进程
from socket import *
from threading import Thread,currentThread
def client():
client = socket(AF_INET, SOCK_STREAM)
client.connect(('127.0.0.1', 8080))
while True:
client.send(('% s hello' % currentThread().getName()).encode('utf-8'))
data = client.recv(1024)
print(data.decode('utf-8'))
if __name__ == '__main__':
for i in range(500):
t = Thread(target=client)
t.start()
# 目前,服务端一个线程,可以抗住客户端500线程并发,
# 如果再加上多进程,每个进程再开多个线程,每个线程再基于gevent模块把io解决了,程序效率就相当牛逼了
最新文章
- dsp28377控制DM9000收发数据
- 双系统下(Ubuntu + win7)windows 无法连接无线网络
- git 的简单使用方法
- html之cellspacing &;&; cellpadding讲解
- 完全跨站点跨域名单点(SSO)同步登录和注销
- Walking Ant(bfs)
- pygame系列_小球完全弹性碰撞游戏
- WinForm 基础
- 【转】简单模拟angular的依赖注入
- HTTPS和TCP协议三次握手设计
- 从0开始的Python学习012数据结构&;对象与类
- Storage 001 电商数据库设计
- vue基于webpack说明
- Web从入门到放弃<;7>;
- Linux&#160;学习笔记之超详细基础linux命令&#160;Part&#160;1
- Servlet中forward和redirect的区别
- kafka生产者和消费者
- CSS3新特性2D、3D效果讲解
- STS 控制台 中文乱码(maven 中文乱码)
- JavaScript stringObject.replace() 方法
热门文章
- ";下载";文件夹的desktop.ini
- poj3181 背包+大数
- Codeforces Round #394 (Div. 2) A. Dasha and Stairs
- HDU 1410 PK武林盟主
- Android onTouchEvent和setOnTouchListener中onTouch的区别
- [转]优化Flash性能
- 卷积神经网络实战-----0001(移植卷积神经网络c++ to python or java)
- 获取mac地址方法之一 GetAdaptersInfo()
- mysql-jdbc创建Statement与执行SQL
- NOIP模拟题 膜法