我在node.js上用redis和socket.io做游戏。
我在这个游戏里有“房间”。房间里有1到9名选手。他们可以随时加入和离开。
房间里还有一个循环(setinterval),它从redis中抽取一个玩家,让这个玩家成为“领头羊”。
按设置存储在redis中的播放器(房间:roomid:online)。当用户加入房间时,我将他添加到这个集合中。当用户离开时,我把他从片场移走。
也许这是个愚蠢的问题,但是…
如何让下一个用户在每次迭代中都不重复,直到我手动停止循环,考虑到集合在循环的每次迭代中都可能更改(可以变小或变大,用户可以加入和离开)。
我想要的示例:集合中有3个用户(0、1、2)
setInterval(function, 1000);
>0
>1
>2
> User 3 joined the room (added to set)
>0
>1
>2
>3
>0
>1
>2
> User 2 left the room (removed from set)
>3
>0
>1
>3
>...etc
注意:我不能从我的主要设置(房间:roomid:online)spop。
对不起我的英语,谢谢你的帮助。
最佳答案
我建议你再保留一套,例如rooms:ROOMID:elected
。使其与每个加入/同步事件上设置的rooms:ROOMID:online
保持同步。spop从它和一旦它是空的,复制内容室:roomid:在线到它。