홈>
배경
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
관련 자료
- python - Flask 서버가 오디오 파일을로드하지 않음
- Azure VM에서 호스팅되는 플라스크 서버에 액세스 할 수 없음
- python - flask가 포함 된 json api - 500 내부 서버 오류
- python - 임시 restful 서버를 시작하는 방법
- python - 플라스크에 다중 Bokeh 서버 통합
- python - 플라스크 편안한 - json 게시물의 출력을 볼 수 없습니다
- 도커의 플라스크, 로컬로 실행되는 다른 플라스크 서버에 액세스
- node.js - Heroku socketio 서버는 로컬로 실행되지만 다른 곳에서는 실행되지 않습니다
- node.js - socketio 소켓을 서버 객체에 저장하는 것이 안전합니까?
- 서버 python-socketio와 Swift socketio 호환 버전
- python 3.x - Flask RESTful 메서드 꾸미기
- javascript - 요청 후 Socketio 서버 듣기
- socket.io - 플라스크 + socketio - 경로 내에서 방에 참여하는 방법 (socketio 함수 내부가 아님)
- Windows 10 IIS 서버의 Python Flask 호스팅
- python - 단일 서버에 flask 배포
- Java SocketIO를 Javascript Server에 연결하는 방법
- javascript - socketio 응답 - 모든 클라이언트로부터 정보를받을 때 서버가 여러 클라이언트에 응답하는 방법은 무엇입니까?
관련 질문
- python : 일대다 관계 flask-sqlalchemy를 식별하는 적절한 방법입니까?
- javascript : Flask는 페이지를 새로 고칠 때 게시 요청 상태를 제거합니다.
- python : Cloud Run Flask 애플리케이션의 비디오 업로드는 해당 파일 또는 디렉토리를 제공하지 않습니다.
- python : 반환 후/반환과 함께 code를 실행하기 위해 스레드를 사용하는 플라스크
- python : 플라스크 앱을 실행할 때 상위 폴더에서 모듈 가져오기가 작동하지 않음
- python : 플라스크를 사용하여 heroku bert pytorch 모델에 배포: 오류: _pickle.UnpicklingError: 잘못된 로드 키, 'v'
- python : 'function' 개체에는 JSON에 'load' 속성이 없습니다.
- python : 일대다 관계 플라스크
- python : Flask babel 인라인 변수
- Google Cloud Run에서 스레딩을 사용하는 Python Flask 앱의 일관되지 않은 성능
당신은 단지
socketio.run(app, port=5005)
를 실행하고 싶어 포트 5005에서 REST API를 누르십시오.이 작동하는 이유는 Flask-SocketIO가 gevent (또는 1.0 릴리스, 이벤트 렛릿)를 기반으로 이벤트 웹 서버를 실행하기 때문입니다.이 서버는 웹 소켓 요청을 직접 처리합니다 (이를 통해 등록한 핸들러 사용) 와이즈 비즈 webatorcket이 아닌 요청을 Flask로 전달합니다.
코드가 작동하지 않는 이유는
socketio.on
때문입니다. 그리고app.run
차단작업입니다. 어느 쪽이 먼저 실행 되든간에 연결을 기다리는 중 두 번째가 시작되지 않도록 반복되었습니다. 다른 포트에서 웹 소켓 연결을 실행하기 위해필요한경우 socketio 또는 앱socketio.run
를 생성해야합니다. 다른 프로세스를 호출하십시오.run