孙绍轩 写道:
> Hello all
>
> I just wrote a small code to holding many http requests until server's
> status change. Everything is fine but when simultaneously connection up
> to 1k+, the server code didn't response to new connection. I've set
> ulimit -n's value to 65535 and the code using epollreactor mode. Are
> there have some limitations? How can I configure to support more
> connections?
> BTW: I use Python 2.4.3 on CentOS 5 64-bit. follow is the code, Thanks
> for you help!
>
> from twisted.internet import epollreactor
> epollreactor.install()
>
> from twisted.internet import reactor, defer, threads
> from twisted.web import server, resource, client
> from twisted.python import log
> from time import sleep
> import sys
>
> def checkstatus_wait(laststatus):
> timeout = 25
> while timeout > 0:
> if int(laststatus) < status:
> return True
> else:
> timeout -= 1
> sleep(1)
> return False
>
> class Simple(resource.Resource):
> isLeaf = True
> def render_GET(self, request):
> if "cmd" in request.args:
> cmd = request.args['cmd'][0]
> else:
> cmd = ""
>
> if cmp(cmd,"listen") == 0:
> if "laststatus" in request.args:
> last = request.args['laststatus'][0]
> if int(last) < status:
> return "ret=1\nerrstring=need update\nlaststatus=%d\n\n" % status
> else:
> d = threads.deferToThread(checkstatus_wait, last)
> d.addCallback(self.testReturn, request)
> return server.NOT_DONE_YET
> else:
> return "ret=1\nerrstring=need update\nlaststatus=%d\n\n" % status
> elif cmp(cmd,"updatestatus") == 0:
> if status < 1000000:
> status += 1
> else:
> status = 0
> #client.getPage('http://211.157.0.47/videochat/listen?cmd=updatestatus')
> return "ret=1\nerrstring=success update\n\n"
> else:
> return "ret=-1\nerrstring=wrong cmd\n\n"
>
> def testReturn(self, ret, request):
> if ret:
> request.write("ret=1\nerrstring=need update\nlaststatus=%d\n\n" % status)
> else:
> request.write("ret=0\nerrstring=no need update\n\n")
> request.finish()
>
> status = 0
>
> log.startLogging(sys.stdout)
> site = server.Site(Simple())
>
> reactor.suggestThreadPoolSize(5000)
> reactor.listenTCP(8080, site)
> reactor.run()
>
>
I've found out how to solve the problem!
I've changed python from 2.4 to 2.5, the problem has gone. It's a bug in
twisted?
--
孙绍轩 Yorgo Sun
China Distance Education Holdings Limited
18th Floor, XueYuan International Tower, No.1 ZhiChun Road, HaiDian District,
Beijing, China 100083
Phone: +8610-8231-9999 Ext 708
***********************************************************
CONFIDENTIALITY CAUTION:
This message is intended only for the use of the individual or entity to whom
it is addressed and contains information that is privileged and confidential.
If you, the reader of this message, are not the intended recipient, you should
not disseminate, distribute or copy this communication. If you have received
this communication in error, please notify us immediately by return email and
delete the original message.
_______________________________________________
Twisted-Python mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python