你好我试图从外部python应用程序(django)发出到flask-socketIO但不幸的是它没有发出。
我已按如下方式定义了我的flask-socket应用程序:
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']))
从外部python应用程序(Django)发送到消息队列:
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测试了来自网页的排放,但是没有来自外部python应用程序(Django):
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应用程序(Django)发出?从外部流程发出的方式有问题吗?
有关信息,我按照说明操作:https://flask-socketio.readthedocs.io/en/latest/#emitting-from-an-external-process
答案 0 :(得分:2)
你想从Django进程发射到Flask-SocketIO服务器吗?如果那是你想要做的,那么在Django方面你需要使用Socket.IO客户端。例如,这一个:https://pypi.python.org/pypi/socketIO-client。
"从外部进程发出"" Flask-SocketIO的功能与众不同。这个想法是你想要几个服务器进程发送到客户端。此功能允许Django服务器通过Flask-SocketIO服务器发送到客户端。
从您的示例中,您似乎期望Flask-SocketIO服务器中的'cron_failed'
事件在您从Django发出时运行,但实际上您正在做的是将该名称的事件发送给客户端。也许你想要的是将事件名称更改为Django发出的'cron_failedMsg'
?这似乎是客户所期望的。