我正在 sockjs-tornado 上构建服务器,并想知道如何利用 tornado 的异步 HTTP 客户端——或其他用于 tornado 的异步设施,例如 asyncmongo、tornado-redis 等。显然,不可能使用 tornado.web.asynchronous
& tornado.gen.engine
随机方法上的装饰器。因此,如果我需要从 SockJSConnection 的 on_message()
中进行异步 Mongo/HTTP/Redis 调用,我该怎么做?
最佳答案
您所要做的就是创建一个由 tornado.gen 装饰器装饰的方法(或函数)
创建了小要点来说明如何做到这一点:https://gist.github.com/3708549
如果您将运行示例并检查服务器控制台,您将看到以下输出:
1 - 提出要求
2 - 从 on_message 返回
... 稍微延迟 ...
3 - 向客户端发送数据
因此,它不会阻塞 ioloop 并在后台进行 HTTP 调用。
关于websocket - sockjs-tornado 方法中的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378242/