2017-03-26 4 views
1

안녕하세요, 외부 파이썬 응용 프로그램 (django)에서 flask-socketIO로 방출하려하지만 불행히도 방출되지 않습니다.외부 프로세스 (Django)에서 방출하지 않는 Flask-socketio 인스턴스

다음과 같이 내 플라스크 소켓 응용 프로그램을 정의

다음과 같이

app.register_blueprint(views) 
socketio.init_app(app, message_queue='redis://127.0.0.1:6380') 

내보기

은 다음과 같습니다

from flask import render_template 
from .. import socketio 
from App import socketio 
from App.views import views 
from flask_socketio import join_room, leave_room, emit 
import cgi 


def ack(): 
    print("cron_failedMsg was delivered") 


@socketio.on('connect', namespace='/node/cron') 
def ws_conn(): 
    print("Connected") 


@socketio.on('join', namespace='/node/cron') 
def on_join(data): 
    print("Joined room " + data['room']) 
    join_room("room_" + data['room']) 
    emit('msg', {'msg': "joined room room_" + 
       data['room']}, room="room_" + data['room']) 


@socketio.on('leave', namespace='/node/cron') 
def on_leave(data): 
    print("leaved") 
    leave_room("room_" + data['room']) 

@socketio.on('cron_failed', namespace='/node/cron') 
def ws_cron_failed(message): 
    print("Failed") 
    print("sending to room " + message['room']) 
    """ 
    socketio.emit('cron_failed', { 
        'cron_failed': cgi.escape(message['cron_failed'])}, namespace='/node/cron') 
    """ 
    emit('cron_failedMsg', { 
     'cron_failed': cgi.escape(message['cron_failed'])}, room="room_" + cgi.escape(message['room'])) 
암은 외부 파이썬 응용 프로그램 (장고)에서 메시지 큐에 발광

:

from flask_socketio import SocketIO 

socketio = SocketIO(message_queue='redis://' + 
          redis6380_conf.redis6380['host'] + ":" + redis6380_conf.redis6380['port']) 
     socketio.emit(
      'cron_' + status, {'cron' + status: redisConnection6381.get(str(userID) + '_' + status), 'room': str(userID)}, namespace='/node/cron') 

불행히도 외부 파이썬 프로세스에서 방출되지 않습니다.

내가 아닌 외부 파이썬 응용 프로그램 (장고)에서 작동 자바 스크립트를 사용하여 웹 페이지에서 방출을 테스트 한 :

var url = "http://" + document.domain + ":" + location.port; 
var socket = io.connect(url + "/node/cron"); 
socket.emit('join',{room:""+$rootScope.Data.ID}); 
socket.emit('cron_failed',{cron_failed:"ddd",room:"3"}) 

내가 외부 파이썬 응용 프로그램 (장고)에서 방출 어떻게해야합니까? 외부 프로세스에서 방출되는 방식에 문제가 있습니까? 정보에 대한

나는 지시 사항을 준수 : https://flask-socketio.readthedocs.io/en/latest/#emitting-from-an-external-process

답변

1

당신이 플라스크-SocketIO 서버에 장고 과정에서 방출 하시겠습니까?를 그게 당신이하고 싶은 일이라면, 장고 쪽에서는 Socket.IO 클라이언트를 사용해야합니다. 예를 들어,이 중 하나는 https://pypi.python.org/pypi/socketIO-client입니다.

Flask-SocketIO의 "외부 프로세스에서 방출"기능이 다릅니다. 여러 서버 프로세스가 클라이언트에 방출되도록하려는 것입니다. 이 기능은 Django 서버가 Flask-SocketIO 서버를 통해 클라이언트에게 방출되도록합니다.

예를 들어, 장고에서 방출 할 때 Flask-SocketIO 서버의 'cron_failed' 이벤트가 실행되기를 기대하고있는 것 같지만 실제로 그 이름의 이벤트를 클라이언트에 보내는 것입니다. 어쩌면 장고를 내보내는 데 이벤트 이름을 'cron_failedMsg'으로 바꿀 수 있을까요? 그것이 바로 고객이 기대하는 것입니다.

+0

팁 주셔서 감사합니다. 정의 된'namespace'와 함께'socketIO-client'을 사용하면 저에게 효과적입니다 :) –