zoukankan      html  css  js  c++  java
  • IO模型 ---非阻塞IO模型之socket/TCP规避IO操作(二)

    server 端

    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',9000))
    sk.setblocking(False) 设置阻塞,为false时是非阻塞
    sk.listen()
    conn_l = []
    del_conn = []
    while True:
    try:
    conn,addr = sk.accept() #不阻塞,但是没人连我会报错
    print('建立连接了:',addr)
    conn_l.append(conn)
    except BlockingIOError:
    for con in conn_l:
    try:
    msg = con.recv(1024) # 非阻塞,如果没有数据就报错,client端睡1秒时server会报错
    if msg == b'': #当客户端断开或未发送消息时,recv会一直得到的是一个b' '空消息
    del_conn.append(con)
    continue
    print(msg)
    con.send(b'byebye')
    except BlockingIOError:pass
    for con in del_conn:
    con.close()
    conn_l.remove(con)
    del_conn.clear()
    当不明白执行步骤就断点,双击打断点,然后右键debug‘server’

    # while True : 10000 500 501

    client 端

    import time
    import socket
    import threading
    def func():
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    sk.send(b'hello')
    time.sleep(1)
    print(sk.recv(1024))
    sk.close()

    for i in range(2):
    threading.Thread(target=func).start()

    while true会大量消耗内存,所以非阻塞IO并不是那么完美,便出现了下节内容的多路复用IO

  • 相关阅读:
    策略模式Strategy
    flex项目
    模板方法Template Method
    timer与ScheduledExecutorService
    java两个字符串的相似度
    一个简单的webshell
    状态模式State
    Java性能优化
    责任链模式China of Responsibility
    ns2.34下mflood协议的完美移植
  • 原文地址:https://www.cnblogs.com/mys6/p/10913968.html
Copyright © 2011-2022 走看看