1. 程式人生 > >單程序單執行緒,完成併發伺服器(select版)

單程序單執行緒,完成併發伺服器(select版)

# 單程序單執行緒,利用select函式完成併發伺服器
from select import *
from socket import *


def main():
    serverSocket = socket(AF_INET, SOCK_STREAM)

    # 伺服器主動斷開連線後,在2MSL時間內可以重啟佔用原來埠號,繼續為客戶端服務
    serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)

    serverSocket.bind(("", 7788))

    serverSocket.listen(5)

    inputs = [serverSocket]

    # 新建字典   key 連線  value 客戶端地址 (ip:埠號)
duiying = {} while True: readable, writable, exceptional = select(inputs, [], []) for sock in readable: if sock == serverSocket: conn, addr = serverSocket.accept() print('%s連線了' % str(addr)) duiying[conn] = addr inputs.append(conn) else
: recvData = sock.recv(1024) add = str(duiying[sock]) if recvData: print('收到%s的訊息:%s' % (add, recvData)) sock.send(recvData) else: del duiying[sock] print('%s斷開連線'
% add) inputs.remove(sock) sock.close() if __name__ == '__main__': main()

測試圖片:
這裡寫圖片描述

利用select庫完成併發伺服器,重點在於理解select的方法(輪詢)

demo下載地址:
下載地址1