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

时间:2019-02-24 04:18:36

标签: node.js websocket socket.io synchronization diff

我正在用SocketIO运行节点服务器,该服务器保留一个定期更新的大对象(应用程序状态)。

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

这就是我所考虑的:

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

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

我相信应该有一个随时可用的解决方案来解决此问题,但我找不到确切的答案。

1 个答案:

答案 0 :(得分:1)

解决方案非常简单。您必须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

查找其他解决方案