使用python/tornado,我想建立一个小的“蹦床”服务器,允许两个设备以RESTish的方式相互通信。可能有更优越/更简单的“现成”方法。我很欢迎这些建议,但我仍然觉得找出如何使用龙卷风来实现我自己的目标是很有教育意义的。在
基本上,我的想法是让设备扮演服务器的角色,使用GET进行longpoll。客户机设备将POST发送到服务器,此时POST主体将作为阻塞GET的响应进行传输。在帖子回复之前,它会被屏蔽。然后,服务器端对响应执行PUT操作,将其传输到被阻止的POST并返回到设备。我想也许我可以用龙卷风队列. 但这似乎没有成功。我的代码:
import tornado
import tornado.web
import tornado.httpserver
import tornado.queues
ToServerQueue = tornado.queues.Queue()
ToClientQueue = tornado.queues.Queue()
class Query(tornado.web.RequestHandler):
def get(self):
toServer = ToServerQueue.get()
self.write(toServer)
def post(self):
toServer = self.request.body
ToServerQueue.put(toServer)
toClient = ToClientQueue.get()
self.write(toClient)
def put(self):
ToClientQueue.put(self.request.body)
self.write(bytes())
services = tornado.web.Application([(r'/query', Query)], debug=True)
services.listen(49009)
tornado.ioloop.IOLoop.instance().start()
不幸的是,ToServerQueue.get()
在队列有项之前不会真正阻塞,而是返回一个龙卷风。并发。未来. 它不是要传递给self.write()
调用的合法值。在
我想我的问题有两个:
1)一个HTTP动词调用(例如get、put、post等)如何阻塞,然后由另一个HTTP动词调用发出信号。在
2)如何将数据从一个调用共享到另一个调用?在
我只讨论了用tornado制作小型REST服务器的简单/直接的用例。我想知道协同程序的东西是否是我所需要的,但是还没有找到一个好的教程/例子来帮助我看到光明,如果这真的是这样的话。在
为每个请求创建新的
RequestHandler
对象。{or你需要实现{a2}的对象{a2。在tornado.queues
是协同路由的队列。^{yielded
它(就像^{GET
请求将持续(以非阻塞方式等待),直到队列中有可用的内容(或者可以定义为Queue.get
arg的超时)。在tornado.queues.Queue
还提供了get_nowait
(也有put_nowait
)不必获得-立即从队列返回项或引发异常。在相关问题 更多 >
编程相关推荐