2

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

如何设置消息传递,以便我可以通过该print功能输出他们的身体?

客户端.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()

服务器.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)

痕迹客户端.py

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

跟踪服务器.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
4

2 回答 2

2

您建立了连接。但是您没有打印该消息。在客户端,而不是这样:

@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'})
于 2019-09-11T12:42:59.943 回答
0

我最近建立了一个 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 引用它。

于 2020-10-01T16:22:52.753 回答