如何在 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 引用它,你就可以随心所欲地调用处理程序。
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 引用它,你就可以随心所欲地调用处理程序。