多程序伺服器(python 版)
阿新 • • 發佈:2019-01-03
多程序伺服器
1. 多程序伺服器
from socket import *
from multiprocessing import *
from time import sleep
# 處理客戶端的請求併為其服務
def dealWithClient(newSocket,destAddr):
while True:
recvData = newSocket.recv(1024)
if len(recvData)>0:
print('recv[%s]:%s'%(str(destAddr), recvData))
else:
print('[%s]客戶端已經關閉'%str(destAddr))
break
newSocket.close()
def main():
serSocket = socket(AF_INET, SOCK_STREAM)
serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)
localAddr = ('', 7788)
serSocket.bind(localAddr)
serSocket.listen(5)
try:
while True:
print('-----主程序,,等待新客戶端的到來------')
newSocket,destAddr = serSocket.accept()
print('-----主程序,,接下來建立一個新的程序負責資料處理[%s]-----'%str(destAddr))
client = Process(target=dealWithClient, args=(newSocket,destAddr))
client.start()
#因為已經向子程序中copy了一份(引用),並且父程序中這個套接字也沒有用處了
#所以關閉
newSocket.close()
finally:
#當為所有的客戶端服務完之後再進行關閉,表示不再接收新的客戶端的連結
serSocket.close()
if __name__ == '__main__':
main()
2. 總結
- 通過為每個客戶端建立一個程序的方式,能夠同時為多個客戶端進行服務
- 當客戶端不是特別多的時候,這種方式還行,如果有幾百上千個,就不可取了,因為每次建立程序等過程需要好較大的資源