Python实现的非阻塞长连接tcpserver服务器端【epoll版】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python实现的非阻塞长连接tcpserver服务器端【epoll版】
利用epoll实现的非阻塞服务器端代码
这不是一个完整实例, 只是一个参考, 偶没有测试过!
#!/usr/bin/env python
# -*-coding:UTF-8-*-
import select,socket,time
# select.epoll()必须在版本高于py2.6以上使用
server = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
server.bind(("192.168.1.174", 2222))
server.listen(1)
server.setblocking(0)
epoller = select.epoll()
epoller.register(server.fileno(),
select.POLLIN|select.POLLERR|select.POLLHUP)
print "Server Started!\n"
while True:
ret = epoller.poll()
if ret==None:
continue
try:
if ret[0][1] == select.POLLIN:
clientSock,clientAddr = server.accept()
print "[",clientAddr,"] Connectioned!\n"
_data = '';
while True:
_tmp = clientSock.recv(1)
if _tmp == 0:
continue
_data +=_tmp
if _tmp == "\n":#如接收到换行分割符则分析已接收到的字符串做出相应处理并反馈给客户端
if _data[:len(_data-1)] == 'help':
clientSock.send(" Thank your! Your said:" + _data)
_data = ''
continue
elif _data == 'xiexie':
clientSock.send(" Thank your! Your said: " + _data)
_data = ''
continue
print "Empty Data!\n" except IndexError: epoller.unregister(server.fileno())
socket.close()
print "Server has been closed!"标签: tcpserver, python, epoll 分类: Python/Java/Erlang学习