从socketIo python发出事件

Posted

技术标签:

【中文标题】从socketIo python发出事件【英文标题】:Emitting event from socketIo python 【发布时间】:2017-01-24 14:16:12 【问题描述】:

我一直在用 Python 开发 socket.io。我正在使用这个lib

我使用this android 部分和lib 示例运行了一个聊天应用程序。我想从一个单独的文件从服务器端触发一个事件。这是我的代码。

import socketio
import eventlet
from flask import Flask, render_template

sio = socketio.Server(logger=True, async_handlers= True)
app = Flask(__name__)

eventlet.monkey_patch()

@sio.on('connect', namespace='/d')
def connect(sid, environ):
   print('connect ', sid)
   pass

@sio.on('messaget', namespace='/d')
def messaget(sid, data):
    print('message ', data)
    # sio.emit('messaget', data, namespace='/d')
    # sendmsg("YO YO")

@sio.on('disconnect', namespace='/d')
def disconnect(sid):
   print('disconnect ', sid)

def start_socket(app):
   # wrap Flask application with socketio's middleware
   app = socketio.Middleware(sio, app)
   eventlet.wsgi.server(eventlet.listen(('', 8000)), app)

def sendmsg(data):
    my_data=  'text': data ;
    sio.emit('messaget', my_data, namespace='/d')

start_socket(app)

我正在从我的另一个 python 文件中调用sendmsg("dipen")。我收到一个日志向所有人发送事件“messaget”[/d],但 android 应用程序没有收到任何消息。如果事件是从 Android 应用程序发出的,它就会起作用。我尝试了 NodeJs 代码,它适用于 NodeJs 代码,所以我很确定我的 Python 代码有问题。希望有人能把我从这件事中拯救出来。

【问题讨论】:

你能分享你的客户端代码的相关部分吗? @Miguel 我正在使用此链接中的示例 - github.com/sreejesh79/android-socket.io-server-demo/blob/master/… 你指向我的 javascript 客户端代码。你不是说安卓客户端有问题吗? @Miguel 抱歉,这是 NodeJs 代码的链接。请参考这个-github.com/sreejesh79/android-socket.io-demo 您上面的服务器使用/d 命名空间。你能指出我在 Android 应用程序中的哪个位置声明或使用了这个命名空间吗? 【参考方案1】:

从 Android 客户端发送消息。你的 Python 代码明白了吗?如果没有,请检查您是否已连接到相同的命名空间。

【讨论】:

是的,它会收到消息,我也可以从该线程发出事件。但它不适用于单独的线程(文件)

以上是关于从socketIo python发出事件的主要内容,如果未能解决你的问题,请参考以下文章

以设定的时间间隔从 flask_socketio 服务器发出事件

Flask-socketio,向另一个命名空间发出事件

如何在服务器端发出 SocketIO 事件

使用 pytest 测试 flask-socketio 服务器发出的事件时出错

如何将flask-socketio用于没有http请求的python脚本

用 Python flask_socketio 反应 socket.io-client 不处理事件