select版tcp服务器(python实现)
来源:互联网 发布:工作台设计作图软件 编辑:程序博客网 时间:2024/05/20 03:44
在编写了单进程非阻塞式服务器之后,还有另外种写服务器的方法,便是利用select。
select是对底层操作系统的一个访问操作,因而效率较高,比单进程非阻塞中的for循环遍历效率要高,可以利用select进行选择,选择出来可以读取信息的套接字、可以发送信息的套接字、以及产生的异常(分别是三个返回值)。
readable, writable, exceptionable = select([], [], [])
以上即为select的使用方法,程序执行到该语句后进行阻塞等待,接收到新的套接字之后便解阻塞。
程序思路便是利用select检测、选择出能读取的套接字(包括服务器套接字、客户端套接字),将接收到消息的客户端套接字存入列表(列表中本来只有服务器套接字),之后进行for循环遍历,读取套接字中的信息或者进行与客户端的连接。
代码如下:
#-*- coding:utf-8 -*-from socket import *from select import selectimport sysdef main(): serSocket = socket(AF_INET, SOCK_STREAM) localAddr = ('', 7788) serSocket.bind(localAddr) serSocket.setblocking(False) serSocket.listen(100) inputs = [serSocket] running = True while True: readable, writable, exceptionable = select(inputs, [], []) for sock in readable: if sock == serSocket: clientSocket, clientAddr = serSocket.accept() print('newClient[%s]'%str(clientAddr)) inputs.append(clientSocket) elif sock == sys.stdin: cmd = sys.stdin.readline() running = False break else: massage = sock.recv(1024) if massage: print('massage from [%s] is %s'%(str(sock), massage.decode('utf-8'))) else: print('[%s] was closed'%(str(sock))) inputs.remove(sock) sock.close() if not running: break serSocket.close()if __name__ == '__main__': main()
select版服务器有一定的缺点,便是只能处理1024个并发客户端,因而其效率还是有一定的局限性。
阅读全文
0 0
- select版tcp服务器(python实现)
- 单进程select版-TCP服务器(python 版)
- select 实现 tcp echo 服务器
- python实现tcp服务器
- 实现TCP并发服务器之三(select函数)
- 服务器编程入门(11)TCP并发回射服务器实现 - 单线程select实现
- tcp服务器(使用select)
- 小型tcp服务器--select
- python实现tcp服务器客户端(支持多客户端)
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- 用select实现TCP回射程序(服务器及客户端)
- select实现tcp并发服务器的基本框架流程
- 使用select系统调用实现简单的TCP服务器
- 使用select系统调用实现简单的TCP服务器
- Hbase安装教程
- CopyOnWriteArrayList——写时复制的容器
- 如何理解云计算?很简单,就像吃货想吃披萨了...(转)
- POJ 1321——棋盘问题(DFS)
- GitHub入门之一:使用github下载项目
- select版tcp服务器(python实现)
- @Cache注释
- [深度学习论文笔记][PAMI 17]A Comprehensive Study on Cross-View Gait Based Human Identification wit
- 【学习摘记】马士兵Servlet&JSP_课时11-课时14_session
- Android四大基本组件介绍与生命周期
- gensim 文档-语料库与向量空间
- Echarts2 grid属性
- Git Stash用法
- 最新发现8种"黑名单"!你中招了吗?