>

배경

Flask-RESTful 확장을 사용하여 간단한 REST API를 만들려고합니다. 이 API는 간단한 서비스를 위해 사용자의 CRUD 및 인증을 관리하기 위해 주로 작동합니다.

또한 Flask-SocketIO 확장을 사용하여 몇 명의 웹 소켓을 만들어서이 사용자가 서비스를 사용하는 다른 사람과 관련된 일부 데이터에 연결하여 실시간 업데이트를 볼 수 있도록 노력하고 있습니다. 따라서이 사용자는 특정 소켓에 연결할 수 있도록 인증 및 승인되었음을 알아야합니다.

문제

그러나 설정하는 데 약간의 문제가 있습니다. 이 두 구성 요소 (REST API 및 SocketIO 서버)를 동일한 Flask 인스턴스에서 함께 작동시킬 수없는 것 같습니다. 내가 말하는 이유는 다음을 실행할 때 REST API 또는 SocketIO 서버가 작동하지만 둘 다 작동하지 않기 때문입니다.

from flask import Flask
from flask_restful import Api
from flask.ext.socketio import SocketIO
app = Flask(__name__)
api = Api(app)
socketio = SocketIO(app)
# some test resources for the API and
# a test emitter statement for the SocketIO server
# are added here
if __name__ == '__main__':
    app.run(port=5000)
    socketio.run(app, port=5005)

질문

이 유형의 설정에 대한 일반적인 솔루션이 동시에 두 개의 다른 Flask 인스턴스를 사용합니까? 예를 들어, SocketIO 서버가 특정 소켓에 연결하기 위해 특정 사용자가 인증 /인가되었는지 확인하기 위해 REST API에 요청해야합니까?


  • 답변 # 1

    당신은 단지 socketio.run(app, port=5005) 를 실행하고 싶어  포트 5005에서 REST API를 누르십시오.

    이 작동하는 이유는 Flask-SocketIO가 gevent (또는 1.0 릴리스, 이벤트 렛릿)를 기반으로 이벤트 웹 서버를 실행하기 때문입니다.이 서버는 웹 소켓 요청을 직접 처리합니다 (이를 통해 등록한 핸들러 사용) 와이즈 비즈  webatorcket이 아닌 요청을 Flask로 전달합니다.

    코드가 작동하지 않는 이유는 socketio.on 때문입니다.  그리고 app.run  차단작업입니다. 어느 쪽이 먼저 실행 되든간에 연결을 기다리는 중 두 번째가 시작되지 않도록 반복되었습니다. 다른 포트에서 웹 소켓 연결을 실행하기 위해필요한경우 socketio 또는 앱 socketio.run 를 생성해야합니다.  다른 프로세스를 호출하십시오.

    run

  • 이전 c++ cli - C ++/CLI Object ^ % (캐럿 퍼센트 부호) 선언은 무엇을 의미합니까?
  • 다음 xml 데이터를 SQL Server 테이블에 삽입하는 방법은 무엇입니까?