Flask-Sockets으로 실험 중입니다. 과거에 청사진에 대한 지원이 추가되었으므로 실제로 필요합니다.청사진 내에서 Python Flask-Sockets가 작동하지 않습니다.
from flask import Flask, request, abort, redirect, url_for, render_template, make_response, Response, jsonify, session
import json
#Importing blueprints
from play import play, play_socket
app = Flask(__name__)
sockets = Sockets(app)
app.register_blueprint(play, url_prefix=r"/play")
sockets.register_blueprint(play_socket, url_prefix=r"/play")
@sockets.route('/echo')
def echo_socket(ws):
while not ws.closed:
message = ws.receive()
response = json.dumps({"Message":message,"Response":"Message received"})
ws.send(response)
그래서, 자바 스크립트에서 웹 소켓을 연결하고 엔드 포인트를 설정하는 '에코'(즉 var ws = new WebSocket("ws://HOST:PORT/"+"echo")
)은 완벽하게 작동합니다. 나는 메시지를 보낼 수 있고 그들은 나에게 곧바로 튀게된다.
내가 청사진 play_socket
에 (청사진이 기능을 이동할 때, 그것은 더 이상 작동 내가 자바 스크립트에서 '/ status_ping'에 엔드 포인트를 변경 가정하지 않습니다.
@play_socket.route('/status_ping')
def ping(ws):
while not ws.closed:
message = ws.receive()
response = json.dumps({"Message":message,"Response":"Message received"})
ws.send(response)
웹 소켓은 클라이언트 측에서 성공적으로 연결하고 나는 def ping(socket):
에서 간단한 print("HERE")
또는 무엇이든을 삽입하여 확인할 수 있지만, 즉시 쓸모를 렌더링, 이후 닫혀. 내가 발견
이 나는 몸을 이동하는 경우 헤더 위의 while not ws.closed:
루프 복사), 그것은 작동합니다. 그러나 서버에서 클라이언트로 데이터를 푸시하는 데 소켓이 필요하므로이 방법을 사용할 수 없습니다. while 루프가 실행되면 잘못 될 것 같습니다. 어떤 이유로 소켓이 즉시 닫힙니다. while not ws.closed:
~ while True:
을 변경해도 아무런 효과가 없습니다.
나는 가능한 한 문제를 격리하려고 시도했지만 더 많은 정보가 필요하면 알려 주시기 바랍니다.
편집 : 청사진
from flask import Flask, request, abort, redirect, url_for, render_template, make_response, Response, jsonify, session, current_app
import sys
sys.path.append('../')
from flask_sockets import Sockets
import json
import time
api_blueprint = Blueprint('api_blueprint', __name__)
@sockets.route('/update_status')
def echo_socket(ws):
message = ws.receive()
while not ws.closed:
ws.send(json.dumps({"data":message}))
time.sleep(1)
if ws.closed:
session.clear()
print("session cleared")
sockets = Sockets(current_app)
sockets.register_blueprint(api_blueprint, url_prefix=r"/api")
app
컨텍스트를 사용할 수있는 주요 run.py
파일에 대한 Codesample이 시작됩니다 :
if __name__ == "__main__":
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(('0.0.0.0', 15080), app, handler_class=WebSocketHandler)
print(server)
server.serve_forever()
는이 문제를 해결할 수 있었습니까? – BKC