我一直在尝试使用gevent创建一个没有任何(主要)成功的TCP服务器。我认为问题在于Windows(我之前在Windows下有套接字问题)。我在Windows7下使用Python2.7,gevent0.13。这里是我的代码:Windows上的gevent TCP服务器
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()
这个实现是一个类似于你可以在这里找到:
http://blog.pythonisito.com/2012/08/building-tcp-servers-with-gevent.html
现在有没有错误,服务器似乎正常工作,但它不读书(并因此发送)任何东西。在Windows7下,sock.makefile()
可能无法正常工作吗?或者问题可能在别的地方?
我试图用简单的
while True:
line = sock.recv(2048)
更换sock.makefile()
但这种操作显然块。
我也试图混合gevent的spawn
和sock.setblocking(0)
。现在这个更好,它的工作,但它不能处理多达300个连接。
我打算在Linux上做一些测试,看看它是否有所作为。与此同时,如果您有任何想法,请随时与我分享。干杯!
UPDATE原始代码在Ubuntu 12.04下执行相同的操作。那么我应该如何实现gevent TCP服务器?
令人难以置信。我一直专注于复杂的事情,而我却错过了那些显而易见的事情。 :)是的,我一直发送''ping''。我已经将它改为'“ping \ n”',现在它应该可以正常工作!非常感谢你!顺便说一下:我将它的性能与其线程版本的性能进行了比较,实际上似乎线程版本更高效!我可能仍然在做一些错误的事情,但我猜这跟现在的问题没有关系。 :) – freakish 2013-03-05 19:47:14