如何在 python-socketio 上发送消息

How to send message on python-socketio

API 文档 (https://python-socketio.readthedocs.io/en/latest/intro.html) 提供了服务器和客户端的示例。但是,如果您 运行 他们,您将不会开始发送消息。而且我不确定如何设置它。

如何设置消息传递以便我可以通过 print 函数输出他们的正文?

client.py

import socketio

sio = socketio.Client()


@sio.event
def connect():
    print('connection established')


@sio.event
def my_message(data):
    print('message received with ', data)
    sio.emit('my response', {'response': 'my response'})


@sio.event
def disconnect():
    print('disconnected from server')


sio.connect('http://localhost:5000')
sio.wait()

server.py

import eventlet
import socketio


sio = socketio.Server()
app = socketio.WSGIApp(sio, static_files={
    '/': {'content_type': 'text/html', 'filename': 'index.html'}
})


@sio.event
def connect(sid, environ):
    print('connect ', sid)
    my_message(sid, {'Test': 'Message'})


@sio.event
def my_message(sid, data):
    sio.send(data)
    print('Send message ', data)


@sio.event
def disconnect(sid):
    print('disconnect ', sid)


if __name__ == '__main__':
    eventlet.wsgi.server(eventlet.listen(('', 5000)), app)

追踪client.py

venv) user@debian:~/work/self_prj/socket_io$ python3 client.py
connection established

追踪server.py

(13043) wsgi starting up on http://0.0.0.0:5000
(13043) accepted ('127.0.0.1', 50352)
127.0.0.1 - - [11/Sep/2019 15:24:08] "GET /socket.io/?transport=polling&EIO=3&t=1568204648.5529237 HTTP/1.1" 200 385 0.000619
connect  cff05ec678794128a6541f33bf3ef6dd
Send message  {'Test': 'Message'}
(13043) accepted ('127.0.0.1', 50356)
127.0.0.1 - - [11/Sep/2019 15:24:08] "POST /socket.io/?transport=polling&EIO=3&sid=cff05ec678794128a6541f33bf3ef6dd HTTP/1.1" 200 167 0.000148
127.0.0.1 - - [11/Sep/2019 15:24:08] "GET /socket.io/?transport=polling&EIO=3&sid=cff05ec678794128a6541f33bf3ef6dd&t=1568204648.5590577 HTTP/1.1" 200 183 0.002194
127.0.0.1 - - [11/Sep/2019 15:24:33] "POST /socket.io/?transport=polling&EIO=3&sid=cff05ec678794128a6541f33bf3ef6dd HTTP/1.1" 200 167 0.000372
127.0.0.1 - - [11/Sep/2019 15:24:33] "GET /socket.io/?transport=polling&EIO=3&sid=cff05ec678794128a6541f33bf3ef6dd&t=1568204648.5659044 HTTP/1.1" 200 183 24.994966
127.0.0.1 - - [11/Sep/2019 15:24:58] "POST /socket.io/?transport=polling&EIO=3&sid=cff05ec678794128a6541f33bf3ef6dd HTTP/1.1" 200 167 0.000355

您已建立连接。但是你没有打印消息。在客户端,而不是这个:

@sio.event
def my_message(data):
    print('message received with ', data)
    sio.emit('my response', {'response': 'my response'})

使用那个:

@sio.event
def message(data):
    print('message received with ', data)
    sio.emit('my response', {'response': 'my response'})

我最近设置了一个 python socketio 系统来在本地服务器和 AWS 服务器之间进行通信。在 AWS 上,我对服务器使用 Flask-SocketIO,因为我想提供网页访问,对客户端使用 python-socketio。

我不确定执行此操作的首选方法,但我(在服务器上)使用了

@sio.on('my_new_message')
def process_message(data):
    logging.warning("Data received: "+data)

然后在客户端:

sio.emit('my_new_message', "Test message")

要点是 emit 引用服务器上的处理程序中给出的名称(如果客户端上也有处理程序,则反之亦然)。以这种方式使用它,只要你用 emit 引用它,你就可以随心所欲地调用处理程序。