单线程并发的server端

非阻塞I/O模型

  • 主要是服务器的启动

  • sk.setblocking(False)设置这个,当服务器没有连接或者接收不到消息时报BlockingIOError 错误

    server端

    import socket

    sk = socket.socket()
    sk.bind(('127.0.0.1', 8080))
    sk.listen()

    sk.setblocking(False) #设置服务器的accept, recv均为非阻塞

    conn_l = [] #连接上的conn都会加入这个列表中
    del_l = [] #断开的conn都会加入到这个列表中
    while 1:
    try:
    conn, addr = sk.accept()
    conn_l.append(conn)

    except BlockingIOError:
    try:
    for conn in conn_l:
    ret = conn.recv(1024)
    if ret == b'':
    del_l.append(conn)
    continue
    else:
    print(ret)

    except BlockingIOError:
    pass

    for conn in del_l:
    conn.close()
    conn_l.remove(conn)
    del_l.clear()
    ——————————————————————————————————
    #client 客户端
    多个客户端同时启动连接服务进行测试

posted @ 2018-10-05 23:12  小白的蟒蛇  阅读(221)  评论(0)    收藏  举报