python gevent 每个socket 的消息接收是否有使用事件监听回调的方法

发布于 2022-08-24 13:05:32 字数 298 浏览 22 评论 0

关于 python gevent TCP服务器的问题,关于 TCPServer , 每个 客户端 连接到 TCPServer 时 gevent 会自动分配一个 greenlet 执行 ,可是 如何 监听 每一个 sokcet 客户端的消息 接收呢, 看到的 代码是 在 greenlet 方法里 运用 循环 接收,难道没有 回调吗? 如图
未命名.jpg

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

站稳脚跟 2022-08-31 13:05:32

gevent已经帮你搞定了, 只有监听到有数据可以读取的时候, 才会切换到那个协程执行

朱染 2022-08-31 13:05:32

gevent 确实提供 I/O 回调,但是属于比较低层的接口,跟你的例子里面的用法相比,回调接口不推荐使用。当然如果你完全了解你在做什么的话,你也可以类似地这样用:

import gevent
loop = gevent.get_hub().loop
s = gevent.socket.socket()
s.connect(('www.google.com', 80))
s.send('GET / HTTP/1.1\r\n\r\n')

def my_callback():
    data = s._sock.recv(1024)  # 可能会抛出 EAGAIN 的异常
    print(data)

watcher = loop.io(s.fileno(), gevent.core.READ)
watcher.start(my_callback)
gevent.sleep(1)  # 启动 event loop
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文