python flask socket 从不发送调用 returns
python flask socket send call never returns
我编写了一个 flask 视图函数,它通过套接字向本地服务发送查询,然后处理数据,并在呈现后 returns 数据。
@app.route('/_search', methods=["GET", "POST"])
@app.route('/_search/', methods=["GET", "POST"])
def searchQuery():
# get the argument that were passed using get
t_query = request.args.get('query')
print(t_query)
t_s = get_searchserver_socket()
t_s.send("C, something")
t_data = t_s.recv(1024)
print(t_data)
return t_data
#abort(404)
我只是使用 flask 中的全局变量来保存套接字,所以它不会每次都重新创建它:
def get_searchserver_socket():
t_socket = getattr(g, '_socket', None)
if t_socket is None:
t_socket = g._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
t_socket.connect((search_server_ip, search_server_port))
return t_socket
这个问题是在视图函数中,套接字发送调用 (t_s.send
) 卡住了,实际上从不发送数据。这是为什么?
谢谢
flask.g 仅适用于当前请求。它存在于应用程序上下文中,您可以在此处阅读更多信息:http://flask.pocoo.org/docs/0.10/appcontext/
你仍然会每次都重新创建这个套接字。如果你想让它持久化,你必须在 Flask 应用程序上下文之外(在你的 Flask 应用程序之外)创建套接字,然后从那里使用它。
我编写了一个 flask 视图函数,它通过套接字向本地服务发送查询,然后处理数据,并在呈现后 returns 数据。
@app.route('/_search', methods=["GET", "POST"])
@app.route('/_search/', methods=["GET", "POST"])
def searchQuery():
# get the argument that were passed using get
t_query = request.args.get('query')
print(t_query)
t_s = get_searchserver_socket()
t_s.send("C, something")
t_data = t_s.recv(1024)
print(t_data)
return t_data
#abort(404)
我只是使用 flask 中的全局变量来保存套接字,所以它不会每次都重新创建它:
def get_searchserver_socket():
t_socket = getattr(g, '_socket', None)
if t_socket is None:
t_socket = g._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
t_socket.connect((search_server_ip, search_server_port))
return t_socket
这个问题是在视图函数中,套接字发送调用 (t_s.send
) 卡住了,实际上从不发送数据。这是为什么?
谢谢
flask.g 仅适用于当前请求。它存在于应用程序上下文中,您可以在此处阅读更多信息:http://flask.pocoo.org/docs/0.10/appcontext/
你仍然会每次都重新创建这个套接字。如果你想让它持久化,你必须在 Flask 应用程序上下文之外(在你的 Flask 应用程序之外)创建套接字,然后从那里使用它。