【码仙】许木大大 12:18:30
ET的服务端不是单线程的吗? 我做了个测试, 在Realm上我第一个发出请求的时候, 人为的弄一个await WaitAsync(2000)来模拟逻辑耗时, (这个时候Session是正在连接的)
然后在等待的时候我用另外一个客户端又发起了一个相同的请求, 但是不加人为等待的, 这个请求立刻就执行了, 这样就导致了如果是重复登录顶号这种逻辑, 我前面登录的人还在await等待一些事务, 然后第二个人上来就直接把我踢下去了, 但当第一个人的事务完毕后, Handler里的逻辑是会继续执行下去的, 并不会因为session被断开而停止
这个到底怎么解决? 是我理解错了吗?
【群主】熊猫(80081771) 12:22:33
你这明显已经是两个协程
当然要加个状态防止第二个连接啦, 如果登录还没完成,禁止第二个登录撒
【群主】熊猫(80081771) 12:27:08
这种操作肯定要做, 这种处理很正常,任何游戏服务器都要做这种处理. 这有个专业名字叫做逻辑重入
【码仙】许木大大 12:29:50
actor消息的, 也会有这种问题出现吗? 先请教一下大家, 不然又要踩坑了
【群主】熊猫(80081771) 12:30:16
actor不会,actor消息是有队列的,同一个发送端的消息保证顺序
这里还没有actor,不能用actor,只能设置状态处理
因为登录还没完成,消息没法跟一个玩家进行关联, 也就做不了消息队列
如果是单realm服,这种处理就很简单了,如果有多个realm服就复杂一点,需要再起一个防止重复登录的服