zoukankan      html  css  js  c++  java
  • 潭州课堂25班:Ph201805201 并发(非阻塞,epoll) 第十课 (课堂笔记)

    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2018/7/12 0012 20:29
    
    import socket
    server = socket.socket()
    server.setblocking(False)
    
    server.bind(('',10000))   #   绑定ip,和端口,
    server.listen(5)
    con_l = []
    while  1:
        try:
            con,addr = server.accept()
            con.setblocking(False)
            con_l.append(con)
        except Exception:
            pass
    
        del_l = [con for con in con_l]
        for con in con_l:
            try:
                recv_data = con.recv(1024)
                if recv_data:
                    print(recv_data)
                    con.send(recv_data)
                else:
                    con.close()
                    con_l.remove(con)
            except Exception:
                pass
    

      

      

    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2018/7/13 0013 23:16
    import socket,selectors
    import tuling
    
    epoll_secret = selectors.DefaultSelector()
    #根据平台选择最佳的IO多路机制,比如linux就会选择epoll
    
    sever = socket.socket()
    sever.bind(('',10000))
    sever.listen(1000)
    
    def read(conn):
        try:
            rec_data = conn.recv(1024)
        # if rec_data:                            # 在 linux 中
            print(rec_data.decode('utf-8'))
            se = tuling.Tuling(rec_data.decode('utf-8'))
            conn.send(se.encode('utf-8'))
        except Exception:
        # else:
            epoll_secret.unregister(conn)  #  如果客户端断开,就取消对应的注册事件
    
    
    
    def accept(sever):
        conn,addr = sever.accept()
        print('客户端地址:', addr)
    #   处理事件
        epoll_secret.register( conn, selectors.EVENT_READ, read )
        # return conn
    
    #   注册事件
    epoll_secret.register( sever, selectors.EVENT_READ, accept )
    #   3 个参数:    监听套接字,       可读,         回调函数
    # 事件说明:当监听到有活跃客户端(可读)发生时,运行指定函数
    
    while True:
        #  开启事件
        # 循环查询客户端事件,把连接的客户端写入列表 ,
        events = epoll_secret.select()
        # print(events)
    
    #   #   [(SelectorKey(fileobj=<socket.socket fd=608, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 9002)>, fd=608, events=1, data=<function accept at 0x000001A04AEE6A60>), 1)]
    #   events[0] 中有监听套接字,accept 的函数
        for key,m in events:
            sock = key.fileobj      # 获取 对等连接套接字
            callback = key.data     # 获取 accept
            callback( sock )        #   == def accept(ser) 的调用
    

      



  • 相关阅读:
    opencv下载,安装教程
    VS2010中程序编译生成都是正确的,直接生成的exe也是正确的,就是在VS中运行出现错误
    Oracle11g em启动报此网站的安全证书有问题的解决方案
    Python教程百度云资源分享,全套,完整版!!!
    Python视频教程免费分享(2020年最新版)
    Python 环境搭建(Win 安装以及Mac OS 安装)
    Python学习路线图(2020年最新版)
    Python爬虫入门教程之BeautifulSoup
    Python数据分析练手:分析知乎大V
    python 可变对象与不可变对象
  • 原文地址:https://www.cnblogs.com/gdwz922/p/9302967.html
Copyright © 2011-2022 走看看