注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿当的博客

世界是个游乐场

 
 
 

日志

 
 

twisted连接数问题  

2013-12-18 15:03:00|  分类: python,twisted |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

原文地址:http://ciniao.me/article.php?id=10


=========================================================


twisted默认用的是select()模式,而Windows的对文件描述符(file descriptor)有一定限制,这个限制值是512,在Linux的下这个限制为1024, 如果超过这个限制值,就会出现上面的异常。如果要在windows中有更好的表现,看来得用iocp,而linux下,用epoll则是更合适的方案,而Twisted自身就已经支持了这2种模式,看看如何启用:
windows:

  1. from twisted.internet import iocpreactor

  2. iocpreactor.install()


linux:

  1. from twisted.internet import epollreactor

  2. epollreactor.install()


    我的程序是在windows上开发的,最终部署到linux上,所以得写一个简单的判断来根据系统选择对应的模式,完整的服务端代码调整为:

  1. import os

  2. if os.name!='nt':

  3.     from twisted.internet import epollreactor

  4.     epollreactor.install()    

  5. else:

  6.     from twisted.internet import iocpreactor

  7.     iocpreactor.install()

  8. from twisted.internet.protocol import Factory,Protocol

  9. from twisted.internet import reactor


  10. class gameSocket(Protocol):

  11.     #有新用户连接至服务器

  12.     def connectionMade(self):

  13.         print 'New Client'

  14.     

  15.     #客户端断开连接

  16.     def connectionLost(self,reason):

  17.         print 'Lost Client'

  18.     

  19.     #收到客户端发送数据

  20.     def dataReceived(self, data):

  21.         print 'Get data:' + str(data)

  22.         #向该客户端发送数据

  23.         self.transport.write('bingo!i got your msg:'+ str(data))


  24. if __name__=='__main__':

  25.     f = Factory()

  26.     f.protocol = gameSocket

  27.     reactor.listenTCP(5200,f)

  28.     print 'server started...'

  29.     reactor.run()


  评论这张
 
阅读(4)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017