【发布时间】:2021-05-10 03:07:33
【问题描述】:
首先要提供一些上下文。问题在底部。
背景
我正在制作一个基于浏览器的 javascript 游戏,用户可以在其中加入房间并四处移动瓷砖。游戏结束后,用户数据被发送到服务器,需要与其他用户数据进行合并,然后将生成的数据发送回每个用户,以显示其他玩家的结果。
我正在使用带有 socket.io 的 Express 节点服务器(前端是 react,fwiw)
手头的问题
我有一个游戏室的 json 文件,我们称之为1a2b.json:
{
"roomID":"1a2b",
"users":[
{
"name":"username",
"id": 123,
"tiles":[
{"char":"I","x":false,"y":false,"r":false,"id":"1"},
{"char":"X","x":false,"y":false,"r":false,"id":"2"}
]
}
{
"name":"username2",
"id": 456,
"tiles":[
{"char":"V","x":false,"y":false,"r":false,"id":"3"},
{"char":"K","x":false,"y":false,"r":false,"id":"4"}
]
}
]
}
当游戏结束时,玩家会发出一个套接字事件 (game-end),该事件会发送更新的玩家 tiles 数据。比如:
{
"name":"username",
"id": 123,
"roomID":"1a2b",
"tiles":[
{"char":"I","x":21,"y":30,"r":"45deg","id":"1"},
{"char":"X","x":50,"y":80,"r":false,"id":"2"}
]
}
在服务器上,当观察到game-end 套接字事件时,我需要使用来自每个用户的新数据更新原始1a2b.json 文件,用新的@987654329 替换玩家的旧tiles 数据@数据。
所有用户将同时发出事件,我认为这会导致某些用户出现fs.writefile 错误。
问题
当多个更新/写入事件同时发生到同一个文件时,我如何处理更新和写入1a2b.json 的内容?在提议的解决方案中,是否有办法判断所有写入请求何时完成,以便我可以将完成的 json 文件中的数据发回给用户?
【问题讨论】:
标签: javascript node.js express socket.io