5.发送消息

优质
小牛编辑
132浏览
2023-12-01

之前章节定义的SocketIO活动处理函数可以凭借send()函数和emit()函数来连接客户端

接下来的例子是将接收到的消息退回到发送它们的客户端:

from flask_socketio import send, emit

@socketio.on('message')
def handle_message(message):
  send(message)

@socketio.on('json')
def handle_json(json):
  send(json, json=True)

@socket.on('my event')
def handle_my_custom_event(json):
  emit('my response', json)

注释一下,send()emit()是怎样用在已命名和未命名的活动上的

当运作在有命名空间的活动中时,send()emit()默认用在接下来的消息中。不同的命名空间可以被具体化到可选择的可选择的命名空间参数上:

@socketio.on('message')
def handle_message(message):
  send(message, namespace='/chat')

@socketio.on('message')
def handle_my_sustom_event(json):
  emit('my response', json, namespace='/chat')

为了实现发送一个多参数的活动,发送一个元组:

def ack():
  print('message was received!')

@socketio.on('my event')
def handle_my_custom_event(json):
  emit('my response', json, callback=ack)

使用回调时,JavaScript客户端使用回调函数在接收到的信息时回调。在客户端应用启用回调函数时,服务器会启用服务端相匹配的函数去响应。如果客户端没有回调任何值,这些将会作为服务端的响应被提供。

客户端的应用同样要求一个来自服务端的确认信息。如果服务端想为一次响应提供一个参数,它必须要在活动处理函数中被返回。

@socketio.on('my event')
def handle_my_custom_event(json):
  # ... handle the event
  return 'foo', 'bar', 123 # client callback will receive these 3 arguments