How to send message on python-socketio

Question:

The API documentation (https://python-socketio.readthedocs.io/en/latest/intro.html) provides examples of the server and client. But if you run them, you will not start messaging. And I’m not sure how to set it up.

How do I set up messaging so I can output their body through the print function?

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)

Trace client.py

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

Trace 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
Asked By: schmutov

||

Answers:

You established a connection. But you didn’t print the message. In the client side, instead of this:

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

Use that:

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

I have recently set up a python socketio system to communicate between a local server and an AWS server. On the AWS I used Flask-SocketIO for the server, because I wanted to provide web page access, and python-socketio for the client.

I’m not sure of the preferred way to do this, but I used (on the server)

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

Then on the client:

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

The point being that the emit references the name given in the handler on the server (and the other way round if you have handlers on the client as well). Using it this way, you can call the handlers what ever you want as long as you reference it with the emit.

Answered By: AEngineer