使用 socketio 与客户端同步应用程序状态

Syncing app state with clients using socketio

我是 运行 一个带有 SocketIO 的节点服务器,它保存一个定期更新的大对象(应用程序状态)。

所有客户端在连接到服务器后都会收到该对象,并应使用套接字(只读)保持实时更新。

以下是我的考虑:

1: 更新后使用 diff 向客户端发送变化增量 (需要处理交付和丢失更新的可靠性)

2: 使用 diffsync 包(但是它允许客户端将更改推送到服务器,但我需要更新是单向的,即服务器-->客户端)

我相信应该有现成的解决方案来解决这个问题,但我找不到明确的答案。

解决方法很简单。您必须 modify the server 以便它只接受来自受信任客户端的更新。

let Server = require('diffsync').Server;
let receiveEdit  = Server.prototype.receiveEdit 
Server.receiveEdit = function(connection, editMessage, sendToClient){
  if(checkIsTrustedClient(connection))
    receiveEdit.call(this, connection, editMessage, sendToClient)
}

but

    // TODO: implement backup workflow
    // has a low priority since `packets are not lost` - but don't quote me on that :P
    console.log('error', 'patch rejected!!', edit.serverVersion, '->', 
            clientDoc.shadow.serverVersion, ':',
            edit.localVersion, '->', clientDoc.shadow.localVersion);

第二个选项是尝试根据 jsondiffpatch

找到另一个解决方案