import socket
import select
import Queue port =500
host = "" sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.setblocking(False) sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind((host,port))
sock.listen(10)
print "server is running on port %d; press Ctrl-c to terminate." % port
rlists =[sock]
wlists=[] msg_que={}
timeout =20 while rlists:
#读,写,错误
rs,ws,es = select.select(rlists,wlists,rlists,timeout)
#3个对象集合 if not(rs or ws or es):
print 'timeout...'
continue
break
for s in rs:
if s is sock:
conn,addr = s.accept()
print 'connect by',addr
conn.setblocking(False)
rlists.append(conn)
msg_que[conn] = Queue.Queue()
else:
data = s.recv(1024)
if data:
print data
msg_que[s].put(data)
if s not in wlists:
wlists.append(s)
else:
if s in wlists:
wlists.remove(s)
rlists.remove(s)
s.close()
del msg_que[s]
for s in ws:
try:
msg = msg_que[s].get_nowait()
except Queue.Empty:
print 'msg empty'
wlists.remove(s)
else:
s.send(msg) for s in es:
print 'except',s.getpeername()
if s in rlists:
rlists.remove(s)
if s in wlists:
wlists.remove(s)
rlists.remove(s)
wlists.remove(s)
s.close()
del msg_que[s]

Server 非阻塞的更多相关文章

  1. [Python]再学 socket 之非阻塞 Server

    再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...

  2. 非阻塞/异步(epoll) openssl

    前段时间在自己的异步网络框架handy中添加openssl的支持,当时在网络上搜索了半天也没有找到很好的例子,后来自己慢慢的摸索,耗费不少时间,终于搞定.因此把相关的资料整理一下,并给出简单的例子,让 ...

  3. python学习笔记-(十四)I/O多路复用 阻塞、非阻塞、同步、异步

    1. 概念说明 1.1 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可 ...

  4. tornado 异步调用系统命令和非阻塞线程池

    项目中异步调用 ping 和 nmap 实现对目标 ip 和所在网关的探测 Subprocess.STREAM 不用担心进程返回数据过大造成的死锁, Subprocess.PIPE 会有这个问题. i ...

  5. socket阻塞与非阻塞,同步与异步、I/O模型,select与poll、epoll比较

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步:      所谓同步,就 ...

  6. 非阻塞socket调用connect, epoll和select检查连接情况示例

    转自http://www.cnblogs.com/yuxingfirst/archive/2013/03/08/2950281.html 我们知道,linux下socket编程有常见的几个系统调用: ...

  7. socket阻塞与非阻塞,同步与异步

    socket阻塞与非阻塞,同步与异步 作者:huangguisu 转自:http://blog.csdn.net/hguisu/article/details/7453390 1. 概念理解 在进行网 ...

  8. C++ 非阻塞套接字的使用 (3)

    异步非阻塞套接字避免了死循环的接收问题,但是软件用起来体验还是很差.究其原因,软件在指令的发送.接收上, 采取了一种不合理的方式:在指令的发送后,立刻调用接收函数,等待回令. 若是采用同步阻塞套接字, ...

  9. Java NIO 同步非阻塞

    同步非阻塞IO (NIO) NIO是基于事件驱动思想的,实现上通常采用Reactor(http://en.wikipedia.org/wiki/Reactor_pattern)模式,从程序角度而言,当 ...

随机推荐

  1. html中给元素添加背景图片或者gif动图

    添加背景图片有四种常用的方式,分别是: repeat    完全平铺 repeat-x    横向平铺 repeat-y    纵向平铺 no-repeat    不平铺 使用示例: <!DOC ...

  2. python 判断平年还是闰年

    while 1: s = input('请填入一个年份:') s = int(s) year = False if s % 100 == 0 and s % 400 == 0: year = True ...

  3. Selenium2+python自动化72-logging日志使用【转载】

    前言 脚本运行的时候,有时候不知道用例的执行情况,这时候可以加入日志,这样出现问题后方便查阅,也容易排查哪些用例执行了,哪些没有执行. 一.封装logging模块 1.关于logging日志的介绍,我 ...

  4. Centos 7 设置 DNS

    1:nmcli con mod eno1 ipv4.dns "114.114.114.114 8.8.8.8" eno1:为网卡名 2:nmcli con up eno1 激活网卡

  5. spring报错 :java.lang.NoSuchMethodException: <init>()

        Spring要求init-method是一个无参数的方法,如果init-method指定的方法中有参数,那么Spring将会抛出java.lang.NoSuchMethodException ...

  6. beijing2016

    4625: [BeiJing2016]水晶 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 201  Solved: 70[Submit][Status ...

  7. 新电脑配置 git 同步github账户

    1.下载安装git 2.初始化 仓库文件夹 git init 3.生成公钥ssh-keygen -t rsa -C "youremail@example.com"4.github ...

  8. docker 与 yarn

    有时我们的项目是使用yarn去发布的,当需要使用docker发布这个项目时,安装yarn是必须的,但是平时使用的npm install -g yarn此时却不可用 从网站上找到解决的方法 地址:htt ...

  9. linux:/lib/libc.so.6: version `glibc_2.7′ not found【没有解决】采用新方法达到目的

    1 下载glibc wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.7.tar.gz 2. tar zxf glibc-2.7.tar.gz 3. cd g ...

  10. Feign负载均衡(五)

    一.Feign定义 Feigin是服务消费者,Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Fei ...