0

我正在构建一个仅基于 Flask SocketIO 的聊天应用程序,没有数据库。其中一项要求是当新用户连接时,应用程序应显示以前的消息。我将每条消息保存到每个发送事件的数组中。好的,现在的问题是,当用户 A 连接并创建一些消息,然后用户 B 连接时,会显示来自用户 B 的所有先前消息,但随后用户 A 也收到了这些消息,因此用户 A 最终得到重复的消息。

客户端 JS

function myFunction() {
    document.getElementById('demo').style['text-decoration']='underline';
  }
  const socket = io.connect("http://127.0.0.1:5000");

socket.on('connect', function() {

  socket.emit('sync_messages');
  socket.emit('sync_channels');

});

烧瓶应用程序代码

    @socketio.on('sync_messages')
def handle_sync():
    socketio.emit('show_all_messages', messages)

@socketio.on('sync_channels')
def handle_sync_channels():
    socketio.emit('show_all_channels', channels)

正在发生的事情的可视化表示

实际的错误是什么

4

1 回答 1

0

socketio.emit()功能不支持上下文,它默认向所有连接的用户广播。尝试使用emit()哪个是 Flask 友好的包装器:

@socketio.on('sync_messages')
def handle_sync():
    emit('show_all_messages', messages)

@socketio.on('sync_channels')
def handle_sync_channels():
    emit('show_all_channels', channels)
于 2020-05-09T17:57:55.453 回答