• select 实现多路复用IO的server_socket


    select 对程序进行同时检测,当发生响应时,数据被拷贝到内核区域,内核区通知用户程序来进行读取数据,内核区域并不知道是客户端连接,因此需要进行循环

    server_socket 端

    import select, socket, queue

    server = socket.socket()
    server.bind(('localhost', 6000))
    server.listen(1000)

    server.setblocking(False) #不会发生阻塞

    inputs = [server, ] #创建一个检测列表
    outputs = []
    msg_dict = {}

    while True:
    readable, writeable, exceptional = select.select(inputs, outputs, inputs)
    for r in readable:
    if r is server:
    conn, addr = server.accept()
    inputs.append(conn) #如果是一个client连接,把其添加到检测列表中
    msg_dict[conn] = queue.Queue() #初始化一个队列
    else:
    data = r.recv(1024)
    msg_dict[r].put(data)
    outputs.append(r) #添加到输出列表中


    for w in writeable:
    data = msg_dict[w].get()
    w.send(data)
    outputs.remove(w)

    for e in exceptional:
    if e in outputs:
    outputs.remove(e)

    inputs.remove(e)

  • 相关阅读:
    请求格式
    表格操作laytpl
    layui的弹出框
    layui表格
    js概念
    栈,队列
    数据结构--线性数据结构
    Symbol详情: 在不支持es6的浏览器上,通过Babel转译
    jquery中用bootstrap中的表单验证及提交
    layui的layer报错 layer is not defined at checkUse
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/9164834.html
Copyright © 2020-2023  润新知