我的编程空间,编程开发者的网络收藏夹
学习永远不晚

how to use linux epo

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

how to use linux epo

  1. #!/usr/bin/python  
  2. # -*- coding:utf-8 -*- 
  3.  
  4. import socket, select 
  5.  
  6. EOL1 = b'\n\n' 
  7. EOL2 = b'\n\r\n' 
  8. response  = b'HTTP/1.0 200 OK\r\nDate: Mon, 1 Jan 1996 01:01:01 GMT\r\n' 
  9. response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n' 
  10. response += b'Hello, world!' 
  11.  
  12. serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  13. serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
  14. serversocket.bind(('0.0.0.0', 8080)) 
  15. serversocket.listen(1) 
  16. serversocket.setblocking(0) 
  17.  
  18. epoll = select.epoll() 
  19. epoll.register(serversocket.fileno(), select.EPOLLIN) 
  20.  
  21. try: 
  22.   connections = {}; requests = {}; responses = {} 
  23.  
  24.   while True: 
  25.      events = epoll.poll(1) 
  26.  
  27.      for fileno, event in events: 
  28.         if fileno == serversocket.fileno(): 
  29.            connection, address = serversocket.accept() 
  30.            connection.setblocking(0) 
  31.            epoll.register(connection.fileno(), select.EPOLLIN) 
  32.  
  33.            connections[connection.fileno()] = connection 
  34.            requests[connection.fileno()] = b'' 
  35.            responses[connection.fileno()] = response 
  36.  
  37.         elif event & select.EPOLLIN: 
  38.            requests[fileno] += connections[fileno].recv(1024) 
  39.  
  40.            if EOL1 in requests[fileno] or EOL2 in requests[fileno]: 
  41.               epoll.modify(fileno, select.EPOLLOUT) 
  42.               print('-'*40 + '\n' + requests[fileno].decode()[:-2]) 
  43.  
  44.         elif event & select.EPOLLOUT: 
  45.            byteswritten = connections[fileno].send(responses[fileno]) 
  46.            responses[fileno] = responses[fileno][byteswritten:] 
  47.  
  48.            if len(responses[fileno]) == 0: 
  49.               epoll.modify(fileno, 0) 
  50.               connections[fileno].shutdown(socket.SHUT_RDWR) 
  51.  
  52.         elif event & select.EPOLLHUP: 
  53.            epoll.unregister(fileno) 
  54.            connections[fileno].close() 
  55.            del connections[fileno] 
  56.  
  57. finally: 
  58.   epoll.unregister(serversocket.fileno()) 
  59.   epoll.close() 
  60.   serversocket.close() 
转载自:http://scotdoyle.com/python-epoll-howto.html.  python epoll编程基本上都是从这篇文章开始。
 
epoll流程:
创建socket
  -->绑定socket并监听
      -->创建epoll对象
          -->注册socket到epoll对象,使用epoll的注册函数对socket进行管理
              -->服务器进入循环
                -->epoll对象轮询注册的socket队列(即:已经就绪的socket队列)
                  -->判断socket是否是新加入的
                     ->新加入socket:创建socket对象,并调用accept(),然后把socket注册到epoll
                     ->非新socket,且socket状态为可读,调用recv()。如果接收到的消息包含中断或exit等字符,修改socket状态
                     ->非新socket,且状态为可写,调用send函数。
                     ->非新socket,且状态为HUP,从注册函数中删除socket,并调用close() 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

how to use linux epo

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

how to use linux epo

#!/usr/bin/python  # -*- coding:utf-8 -*-  import socket, select  EOL1 = b'\n\n' EOL2 = b'\n\r\n' response  = b'HTTP/1.0
2023-01-31

How-to use MySQL-pyt

对于数据库操作,和 TCP/IP 的三次握手异曲同工之妙,建立连接,执行操作,断开连接。当然这就需要建立连接的工具Python连接mysql的方案有oursql、PyMySQL、 myconnpy、MySQL Connector 等,不过本
2023-01-31

编程热搜

目录