web服务器
Posted ql0302
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web服务器相关的知识,希望对你有一定的参考价值。
单进程服务器
from socket import * serSocket = socket(AF_INET,SOCK_STREAM) #重复使用绑定的信息 serSocket.setsockopt(sol_socket,so_reuseaddr,1) #四次挥手,服务器先结束,而且想立即运行服务器,还能绑定 localAddr = ("",7788) serSocket.bind(localAddr) serSocket.listen(5) while True: print("-----主进程,等待新客户端的到来-----") newSocket,destAddr = serSocket.accept() print("-----主进程,接下来负责数据处理") try: while True: recvData = newSocket.recv(1024) if len(recvData)>0: print(‘recv[%s]:%s‘%(str(destAddr),recvData)) else: print(‘[%s]客户端已经关闭‘%str(destAddr)) break finally: newSocket.close() serSocket.close()
多进程服务器:
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()
多线程服务器:
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 = Thread(target = dealWithClient,args=(newSocket,destAddr)) client.start() #因为线程中共享这个套接字,如果关闭了会导致这个套接字不可用, #但是此时在线程中这个套接字可能还在接收数据,因此不能关闭 #newSocket.close() finally: serSocket.close() if __name__ == "__main__": main()
以上是关于web服务器的主要内容,如果未能解决你的问题,请参考以下文章