zoukankan      html  css  js  c++  java
  • twisted连接数问题

    原文地址: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()


  • 相关阅读:
    Qt5.3.0 for android windows平台下搭建及demo(虫子的博客)
    不分享,用户很少,什么都没有,没有秒传
    Entity Framework 5.0系列之约定配置
    学习SQL关联查询
    SQL语句调优
    数组总结篇(上)
    实现同一套代码针对不同平台工程的编辑和编译
    dispatch队列
    SOCKET网络编程快速上手(一)
    Javascript判断两个日期是否相等
  • 原文地址:https://www.cnblogs.com/cly84920/p/4426434.html
Copyright © 2011-2022 走看看