单进程非阻塞服务器

来源:互联网 发布:mac电子书导入kindle 编辑:程序博客网 时间:2024/06/07 02:55

进程的执行取决于调度算法,多个进程就是多个资源,进程是资源分配的单位,用多进程在客户端访问服务器中是很常见的应用。下面我们介绍一种单进程实现客户端访问服务器的方法,其基本思想就是虽然使用单线程但是不让程序产生阻塞,程序不断运行没有阻塞,看起来就像伪的多线程。

在windows中我们使用网络调试助手产生3个客户端同时访问Ubuntu中建立的服务器


在ubuntu中我们建立一个服务器端,代码如下:

# 单线程费堵塞服务器from socket import *serSocket = socket(AF_INET, SOCK_STREAM)serSocket.setblocking(False)localAddr = ('', 7788)serSocket.bind(localAddr)serSocket.listen(10)# 用来保存所有已经连接的客户端的信息clientAddrList = []while True:    try:        clientSocket, clientAddr = serSocket.accept()    except:        pass    else:        print('一个新的客户端到来:%s' % (clientAddr))        clientSocket.setblocking(False)        clientAddrList.append((clientSocket, clientAddr))    for clientSocket, clientAddr in clientAddrList:        try:            recvData = clientSocket.recv(1024)        except:            pass        else:            if len(recvData) > 0:                print('%s,%s' % (str(clientAddr), recvData))            else:                clientSocket.close()                clientAddrList.remove((clientSocket, clientAddr))                print('%s 已经下线' % (str(clientAddr)))
这里最主要的就是使用了
clientSocket.setblocking(False)
将Socket设为非堵塞状态


最终结果是:



原创粉丝点击