socket 多連接配接
本文檔為文檔https://www.cnblogs.com/wodeboke-y/p/11241472.html
後續内容。
上一文檔中的案例2給出了一個阻塞型socket server
下面為非阻塞型,關鍵點如下:
accept阻塞,使用thread解決
socket阻塞,使用setblocking解決
# coding=utf-8
# !/usr/bin/env python
'''
'''
from socket import *
from time import ctime
import threading
import time
HOST = ''
PORT = 2159
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
socks = [] # 放每個用戶端的socket
def handle():
while True:
for s in socks:
try:
data = s.recv(BUFSIZ) # 到這裡程式繼續向下執行
except Exception as e:
continue
if not data:
socks.remove(s)
continue
s.send('[%s],%s' % (ctime(), data))
t = threading.Thread(target=handle) # 子線程
if __name__ == '__main__':
t.start()
print(u'我在%s線程中 ' % threading.current_thread().name) # 本身是主線程
print('waiting for connecting...')
while True:
clientSock, addr = tcpSerSock.accept()
print('connected from:', addr)
clientSock.setblocking(0)
socks.append(clientSock)
轉載于:https://www.cnblogs.com/wodeboke-y/p/11241555.html