我正在构建一个仅基于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');
});
Flask应用程序代码
@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)
发生的事情的视觉表现
在 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)