1)人与系统
2)人与人
好友的添加删除,由于业务经常需要单线程操作,但是好友 这种却没有一个集结玩家的地方,因此我认为即使使用redis,如果没有投递 到指定线程操作,其实也会出现问题,只不过这种业务出了问题影响不大而已,比如:
addFriend(rid1,rid2);
xxx
addFriend(rid2, rid1);
delFriend(rid1,rid2);
xxx
delFriend(rid2, rid1);
由于每步操作都不是原子操作,可能会出现:一个人有另外一个人的好友,但是另外一个人却不在别人好友列表中。
首先想到的是:可以按照模块来搞,把好友的所有业务都投递到一个线程中,按照模块号搞,这样子是解决了问题,只不过不能多线程处理逻辑了。
3)人与人聚集在一个房间(工会)中
而工会,组队等是有一个编号的,讲业务处理按照这个编号投递到对应线程处理即可。则问题是少了很多。