我正在用SocketIO运行节点服务器,该服务器保留一个定期更新的大对象(应用程序状态)。
所有客户端在连接到服务器后都会收到对象,并应使用套接字(只读)实时更新对象。
这就是我所考虑的:
1:
更新后,使用diff
向客户端发出更改增量
(需要处理交付的可靠性和丢失的更新)
2 :
使用diffsync
程序包(但是它允许客户端将更改推送到服务器,但是我需要单向更新,即服务器->客户端)
我相信应该有一个随时可用的解决方案来解决此问题,但我找不到确切的答案。
答案 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)
}
// 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