server:

  1. #!_*_coding:utf-8_*_
  2. #__author__:"Alex huang"
  3. import selectors #selector模块集成了select,epoll,优先使用epoll,如果系统支持,windows不支持epoll
  4. import socket
  5.  
  6. def accept(s,mask): #这个回调函数实现建立N个并发连接
  7. conn,addr = s.accept()
  8. print("established to ",addr)
  9. conn.setblocking(False)
  10. sel.register(conn,selectors.EVENT_READ,handle) #将连接加入selector并回调handle
  11. def handle(conn,mask): #要实现的功能写在这个回调函数内
  12. data = conn.recv(1024)
  13. if data:
  14. print("recv:",data.decode())
  15. re_data = data.decode().upper()
  16. conn.send(re_data.encode())
  17. else:
  18. print("closed conn...")
  19. sel.unregister(conn) #关闭连接
  20. conn.close()
  21. sel = selectors.DefaultSelector()
  22. s = socket.socket()
  23. s.bind(("0.0.0.0",5000))
  24. s.listen(5)
  25. sel.register(s,selectors.EVENT_READ,accept) #第一次回调accept,s是传给执行函数accept的参数
  26.  
  27. while True:
  28. events = sel.select() #默认阻塞,有连接时就返回活动的连接列表
  29. for key,mask in events:
  30. callback = key.data
  31. callback(key.fileobj,mask)

  client:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author aliex-hrg
  4. __author__ = "alex"
  5. import socket
  6. import sys
  7. messages = [ 'This is the message. ',
  8. 'It will be sent ',
  9. 'in parts.',
  10. 'the end of'
  11. ]
  12. server_address = ('192.168.80.100', 5000)
  13. # Create a TCP/IP socket
  14. socks = [ socket.socket(socket.AF_INET, socket.SOCK_STREAM) for i in range(10000) ] #模拟10000个会话
  15. # Connect the socket to the port where the server is listening
  16. print('connecting to %s port %s' % server_address)
  17. for s in socks:
  18. s.connect(server_address)
  19.  
  20. for message in messages:
  21.  
  22. # Send messages on both sockets
  23. for s in socks:
  24. print('%s: sending "%s"' % (s.getsockname(), message) )
  25. s.send(message.encode())
  26.  
  27. # Read responses on both sockets
  28. for s in socks:
  29. data = s.recv(1024)
  30. print( '%s: received "%s"' % (s.getsockname(), data) )
  31. if not data:
  32. print(sys.stderr, 'closing socket', s.getsockname() )

  ...

基于selector的socket并发的更多相关文章

  1. IO多路复用丶基于IO多路复用+socket实现并发请求丶协程

    一丶IO多路复用 IO多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 IO多路复用作用: 检测多个socket是否已经发生变 ...

  2. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  3. python全栈开发从入门到放弃之socket并发编程之协程

    一.为什么会有协程 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情 ...

  4. C#高性能大容量SOCKET并发(十一):编写上传客户端

    原文:C#高性能大容量SOCKET并发(十一):编写上传客户端 客户端封装整体框架 客户端编程基于阻塞同步模式,只有数据正常发送或接收才返回,如果发生错误则抛出异常,基于TcpClient进行封装,主 ...

  5. C#高性能大容量SOCKET并发(七):协议字符集

    原文:C#高性能大容量SOCKET并发(七):协议字符集 UTF-8 UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建.现在已经标准化为RFC 362 ...

  6. Winfrom 基于TCP的Socket 编程

    基于TCP的Socket基础例子 服务端的代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); ...

  7. 基于心跳的socket长连接

    http://coach.iteye.com/blog/2024444 基于心跳的socket长连接 博客分类: http socket 案例: 心跳: socket模拟网页的报文连接某个网站,创建t ...

  8. 基于RTKLIB构建高并发通信测试工具

    1. RTKLIB基础动态库生成 RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,由日本东京海洋大学的 ...

  9. 基于netty的socket服务端触发了channelInactive方法,但实际连接没有断开的问题

    背景: 一个中小型H5游戏,后端使用基于 netty 的socket服务 服务端 分为 分发服务器 & 业务服务器,业务服务器可负载 用户客户端与分发服务器连接 分发服务器再作为客户端与每台业 ...

随机推荐

  1. awr脚本使用dump导出导入

    实际工作中,存在这么一种场景.客户现场分析问题,无法立即得出结论,且无法远程服务器,因此对于服务器中的awr信息,如何提取是一个问题,oracle有脚本可以对服务器中以db为单位导出awr基表的dum ...

  2. Django之模型层-了解ORM

    ORM(对象-关系-映射)简单使用 ORM实现了数据模型与数据库的解耦合,即数据模型的设计不需要指定特定的数据库,通过python代码可以直接对数据库实现增删改查 MySQL语法 #sql中的表 #创 ...

  3. 九度OJ1108-堆栈的使用

    题目1108:堆栈的使用 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:11620 解决:3372 题目描述: 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.P ...

  4. 九度OJ-1001-A+B矩阵-有些小技巧

    题目1001:A+B for Matrices 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:22974 解决:9099 题目描述: This time, you are supposed ...

  5. Mariadb-10.1.22配置项

    ## These groups are read by MariaDB server.# Use it for options that only the server (but not client ...

  6. [LeetCode&Python] Problem 830. Positions of Large Groups

    In a string S of lowercase letters, these letters form consecutive groups of the same character. For ...

  7. CodeForces - 441E:Valera and Number (DP&数学期望&二进制)

    Valera is a coder. Recently he wrote a funny program. The pseudo code for this program is given belo ...

  8. Gym - 101889D:Daunting device (老司机树)

    题意:N个格子排出一排,开始格子颜色都是1:现在有M个操作: 或,把区间[L,R]颜色改为c: 或,查询一共有多少格子颜色为c. 最后求颜色最多的数量. 数据是随机的,且强制在线. 思路:ODT裸题. ...

  9. python3.x 正则表达式的应用

    正则表达式是我认为比较难的一个东西,今天忽然又学到了这个,想到写下来,以后作为参考手册使用. python如果想使用python需要引用re方法,在文件开始进行引用. import re 接下来说一下 ...

  10. 求连续数字的和------------------------------用while的算法思想

    前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...