基于selector的socket并发
server:
#!_*_coding:utf-8_*_
#__author__:"Alex huang"
import selectors #selector模块集成了select,epoll,优先使用epoll,如果系统支持,windows不支持epoll
import socket def accept(s,mask): #这个回调函数实现建立N个并发连接
conn,addr = s.accept()
print("established to ",addr)
conn.setblocking(False)
sel.register(conn,selectors.EVENT_READ,handle) #将连接加入selector并回调handle
def handle(conn,mask): #要实现的功能写在这个回调函数内
data = conn.recv(1024)
if data:
print("recv:",data.decode())
re_data = data.decode().upper()
conn.send(re_data.encode())
else:
print("closed conn...")
sel.unregister(conn) #关闭连接
conn.close()
sel = selectors.DefaultSelector()
s = socket.socket()
s.bind(("0.0.0.0",5000))
s.listen(5)
sel.register(s,selectors.EVENT_READ,accept) #第一次回调accept,s是传给执行函数accept的参数 while True:
events = sel.select() #默认阻塞,有连接时就返回活动的连接列表
for key,mask in events:
callback = key.data
callback(key.fileobj,mask)
client:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg
__author__ = "alex"
import socket
import sys
messages = [ 'This is the message. ',
'It will be sent ',
'in parts.',
'the end of'
]
server_address = ('192.168.80.100', 5000)
# Create a TCP/IP socket
socks = [ socket.socket(socket.AF_INET, socket.SOCK_STREAM) for i in range(10000) ] #模拟10000个会话
# Connect the socket to the port where the server is listening
print('connecting to %s port %s' % server_address)
for s in socks:
s.connect(server_address) for message in messages: # Send messages on both sockets
for s in socks:
print('%s: sending "%s"' % (s.getsockname(), message) )
s.send(message.encode()) # Read responses on both sockets
for s in socks:
data = s.recv(1024)
print( '%s: received "%s"' % (s.getsockname(), data) )
if not data:
print(sys.stderr, 'closing socket', s.getsockname() )
...
基于selector的socket并发的更多相关文章
- IO多路复用丶基于IO多路复用+socket实现并发请求丶协程
一丶IO多路复用 IO多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 IO多路复用作用: 检测多个socket是否已经发生变 ...
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...
- python全栈开发从入门到放弃之socket并发编程之协程
一.为什么会有协程 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情 ...
- C#高性能大容量SOCKET并发(十一):编写上传客户端
原文:C#高性能大容量SOCKET并发(十一):编写上传客户端 客户端封装整体框架 客户端编程基于阻塞同步模式,只有数据正常发送或接收才返回,如果发生错误则抛出异常,基于TcpClient进行封装,主 ...
- C#高性能大容量SOCKET并发(七):协议字符集
原文:C#高性能大容量SOCKET并发(七):协议字符集 UTF-8 UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建.现在已经标准化为RFC 362 ...
- Winfrom 基于TCP的Socket 编程
基于TCP的Socket基础例子 服务端的代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); ...
- 基于心跳的socket长连接
http://coach.iteye.com/blog/2024444 基于心跳的socket长连接 博客分类: http socket 案例: 心跳: socket模拟网页的报文连接某个网站,创建t ...
- 基于RTKLIB构建高并发通信测试工具
1. RTKLIB基础动态库生成 RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,由日本东京海洋大学的 ...
- 基于netty的socket服务端触发了channelInactive方法,但实际连接没有断开的问题
背景: 一个中小型H5游戏,后端使用基于 netty 的socket服务 服务端 分为 分发服务器 & 业务服务器,业务服务器可负载 用户客户端与分发服务器连接 分发服务器再作为客户端与每台业 ...
随机推荐
- PhoneGap Vs AppCan
首先在写这篇文章前,必须先申明一下,本人是技术出身,对HTML技术及手机客户端都有过编程经验,只是出于工作岗位的变动,便没有再具体代码工作,以下文章涉及的中间件的基本代码实现及前期的API使用,都是自 ...
- js--单例设计模式
通过闭包方法实现: var creatE=(function(){ var obj; return function(){ if(!obj){ } reutrn obj; } })();//自调用 c ...
- spark-streaming first insight
一. Spark Streaming 构建在Spark core API之上,具备可伸缩,高吞吐,可容错的流处理模块. 1)支持多种数据源,如Kafka,Flume,Socket,文件等: Basic ...
- [LeetCode&Python] Problem 746. Min Cost Climbing Stairs
On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once you pay ...
- HDU 6015 Skip the Class 优先队列 map的使用
Skip the Class Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- Fedora初体验
========1. 下载https://getfedora.org/zh_CN/workstation/download/下载如下2个文件:Fedora-Workstation-Live-x86_6 ...
- Mybatis(四)
参考网址如下: http://www.cnblogs.com/xdp-gacl/p/4264425.html 向大家推荐 博客园 孤傲苍狼 大哥的博客,东西写的有水平.小弟记录一下自己的学习历程,自勉 ...
- mysql 服务器启用event_scheduler
https://blog.csdn.net/yangzefei1991/article/details/51800867 首先在sql中查询计划事件的状态:SHOW VARIABLES LIKE 'e ...
- LG5901 【模板】欧拉定理
题意 题目描述 给你三个正整数,$a,m,b$,你需要求: $a^b \mod m$ 输入输出格式 输入格式: 一行三个整数,$a,m,b$ 输出格式: 一个整数表示答案 输入输出样例 输入样例#1: ...
- webpack 搭建问题汇总
总结一下遇到的问题: 1.这样的警告(The 'mode' option has not been set, webpack will fallback to 'production' for thi ...