1. 程式人生 > >多程序伺服器(python 版)

多程序伺服器(python 版)

多程序伺服器

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. 總結

  • 通過為每個客戶端建立一個程序的方式,能夠同時為多個客戶端進行服務
  • 當客戶端不是特別多的時候,這種方式還行,如果有幾百上千個,就不可取了,因為每次建立程序等過程需要好較大的資源