2017-03-26 3 views
1

こんにちは、外部のPythonアプリケーション(django)からflask-socketIOに送信しようとしていますが、残念ながらそれは発光しません。Flask-socketioのインスタンスが外部プロセス(Django)から送信されない

次のように私は私のフラスコソケットアプリが定義されている次のように

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

私の見解は以下のとおりです。外部のPythonアプリケーション(ジャンゴ)からのメッセージキューに発光

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') 

残念ながら、外部のPythonプロセスから放出されません。

私はそれが動作するJavaScriptを使用してWebページからではなく、外部のPythonアプリケーション(ジャンゴ)からの発光をテストしてみた:

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"}) 

私は外部のPythonアプリケーション(ジャンゴ)から放出する方法を教えてください。外部プロセスから放出される方法に問題はありますか?詳細については

私は指示に従った:https://flask-socketio.readthedocs.io/en/latest/#emitting-from-an-external-process

答えて

1

あなたはフラスコ-SocketIOサーバーにDjangoのプロセスから発光するようにしたいですか?それがあなたがやりたいことなら、Django側ではSocket.IOクライアントを使う必要があります。たとえば、これはhttps://pypi.python.org/pypi/socketIO-clientです。

Flask-SocketIOの「外部プロセスからの放出」機能が異なります。その考え方は、いくつかのサーバープロセスがクライアントに送信されるようにすることです。この機能は、DjangoサーバがFlask-SocketIOサーバを介してクライアントに送信することを可能にします。

あなたの例では、Flags-SocketIOサーバーの'cron_failed'イベントがDjangoから出るときに実行されることを期待していたようですが、実際にはその名前のイベントをクライアントに送信しています。おそらくあなたが望むのは、Djangoのemitでイベント名を'cron_failedMsg'に変更することでしょうか?それはクライアントが期待するものです。

+0

ありがとうございます。定義された 'namespace'が' socketIO-client'を使って私のために働いた:) –

関連する問題