gpt4 book ai didi

python - Windows 上的 gevent TCP 服务器

转载 作者:可可西里 更新时间:2023-11-01 02:49:25 25 4
gpt4 key购买 nike

到目前为止,我一直在尝试使用 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()

此实现类似于您可以在此处找到的实现:

http://blog.pythonisito.com/2012/08/building-tcp-servers-with-gevent.html

现在没有错误,服务器似乎可以正常工作,但是它没有读取(因此也没有发送)任何东西。 sock.makefile() 有没有可能在Windows7下不能正常工作?还是问题出在其他地方?

我尝试用简单的方式替换 sock.makefile()

while True:
line = sock.recv(2048)

但是这个操作显然是阻塞的。

我还尝试将 gevent 的 spawnsock.setblocking(0) 混合使用。现在这更好了并且可以工作,但是它一次无法处理超过 ~300 个连接。

我打算在 Linux 上做一些测试,看看它是否有所作为。同时,如果您有任何想法,请随时与我分享。干杯!

更新 原始代码在 Ubuntu 12.04 下做同样的事情。那么我应该如何实现gevent TCP服务器呢??

最佳答案

你向服务器发送了什么?确保它以换行符终止。否则 readline() 将无法工作。

如果您认为自己在代码中做的事情是正确的,您还可以使用 tcpdump 或 wireshark 来查看 TCP 层发生了什么。

关于python - Windows 上的 gevent TCP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15228973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com