我一直在试图创build一个没有任何(主要)成功的gevent的TCP服务器。 我认为问题出在Windows内(我之前在Windows下有套接字问题)。 我在Windows7下使用Python2.7,gevent0.13。 这是我的代码:
from gevent import socket from gevent.server import StreamServer def handle_echo(sock,address): try: fp = sock.makefile() while True: # Just echos whatever it receives try: line = fp.readline() except Exception: break if line: try: fp.write(line) fp.flush() except Exception: break else: break finally: sock.shutdown(socket.SHUT_WR) sock.close() server = StreamServer(("",2345),handle_echo) server.server_forever()
这个实现类似于你可以在这里find的实现:
http://blog.pythonisito.com/2012/08/building-tcp-servers-with-gevent.html
现在没有错误,服务器似乎正常工作,但它不读取(并发送)任何东西。 是否有可能sock.makefile()在Windows7下无法正常工作? 或者,也许问题在别的地方?
如何解决这个“NotImplementedError”在Windows上的urllib2 / gevent错误?
在Nginx中禁用请求缓冲
如何在windows上安装zeroRPC(python)
理解Apache平台每秒的请求
http服务器使用python&gevent(不使用apache)
我试图用简单的replacesock.makefile()
while True: line = sock.recv(2048)
但是这个操作明显阻止。
我也试图混合gevent的spawn和sock.setblocking(0) 。 现在,这样做比较好,而且能够工作,但是一次只能处理300多个连接。
我要在Linux上做一些testing,看看它是否有所作为。 同时,如果您有任何想法,请随时与我分享。 干杯!
更新原始代码在Ubuntu 12.04下做同样的事情。 那么我应该如何实现gevent TCP服务器?
如何用Python编写Web应用程序?
Python,gevent,urllib2.urlopen.read(),下载加速器
一起使用gevent和multiprocessing与subprocess通信
在virtualenv中安装gevent
实现与gevent兼容的工作进程池的最佳方式是什么?
你发送给服务器的是什么? 确保它以换行符终止,否则readline()将不起作用。
你也可以使用tcpdump或wireshark来查看TCP层发生了什么,如果你认为你在代码中做了正确的事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。