我可能误解了一些非常基本的东西。我是龙卷风和Web服务器的新手。我使用了一些教程和很多谷歌搜索入门,但是我仍然发现自己陷于基础。
我在具有龙卷风6.0.4的Ubuntu 18.04服务器上使用python 3.6.9。
我有一个龙卷风服务器,它通过tornado.web.RequestHandler
类get()函数接受GET请求,并对其进行一些计算。这一切都正常工作。
我需要龙卷风服务器将结果(一个numpy数组)返回给发送请求的客户端。
据我所知,我所做的一切都是同步的,因为我自己没有添加任何异步代码。
我的代码简而言之:
class MainHandler(tornado.web.RequestHandler):
def get(self):
base_data = self.get_argument("base_data")
compute_data(base_data)
#Here I want to return the data back to the client
application = tornado.web.Application(handlers=[ (r"/calculator", MainHandler)])
if __name__ == "__main__":
http_server=tornado.httpserver.HTTPServer(application)
http_server.listen(__PORT__)
tornado.ioloop.IOLoop.instance().start()
我没有有关客户端的信息。
我没有任何想法,也找不到任何教程来解释如何从GET请求中回复客户端。
我尝试在get()函数末尾简单地返回np.array,但是得到了:
TypeError: object numpy.ndarray can't be used in 'await' expression
我以为我需要做的是向客户端发出POST请求,但是我(不知道)没有客户端的IP和端口。
我还随机发现也许应该使用tornado.ioloop.IOLoop.current().spawn_callback(data)
,但是我猜那是不对的,因为它要求我提供可调用的函数。
我想将计算出的数据发送回请求它的客户端。
在此先感谢您提供任何帮助。我知道我可能误解了龙卷风的含义或工作原理,但是我找不到任何专门解决此问题的地方。
答案 0 :(得分:1)
expenses
中的许多方法被设计为在
子类并在整个应用程序中使用。这是常见的
定义一个 RequestHandler
类来覆盖 BaseHandler
等方法
和 write_error
然后子类化你自己的 get_current_user
而不是
BaseHandler
用于所有特定处理程序。
因此,在您的示例中,还可以编写一个 RequestHandler
方法,该方法可以更轻松地在 MainHandler 以及其他处理程序中编写响应。
看一个简单的例子:
write_response
如果您返回给客户端的 from tornado.web import RequestHandler
from http import HTTPStatus
import json
class BaseHandler(RequestHandler):
def write_response(self, status_code, result=None, message=None):
self.set_status(status_code)
if result:
self.finish(json.dumps(result))
elif message:
self.finish(json.dumps({
"message": message
}))
elif status_code:
self.set_status(status_code)
self.finish()
class MainHandler(BaseHandler):
def get(self):
self.write_response(status_code=HTTPStatus.OK, message='Hello calculator!')
是以下形式,则使用带有 data
参数的 write_response
result
答案 1 :(得分:0)
所以我错过了最基本的东西。
显然,在get()函数的Tornado self.write({"data_name":data})
中会返回数据。
现在我仍然遇到无法返回字节数据的问题(我的情况已经改变,现在我需要将numpy数组转换为wav文件并发送到wav文件中),但我得到了一个不同的结果错误Object of type 'bytes' is not JSON serializable
,但如果我无法弄清楚,我将为此提出一个新问题。