zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/9164834.html
Copyright © 2011-2022 走看看