我目前正在开发一款在线游戏,但我的login server. 每个玩家只能从一个客户端登录,如果他尝试打开另一个客户端并尝试登录,它应该告诉该帐户已经从另一个客户端登录。
这是可行的,但问题是当有人试图在两个客户端同时登录时从 2 个客户端登录,导致帐户在 2 个不同的地方登录。这是我不想要的。
我目前的方法是(我使用的是 GoLang):
var onLogin map[string]uint16 = make(map[string]uint16)
func login(data []byte) []byte {
username := cstring(data[8:23])
password := cstring(data[24:39])
// check if already trying to login
_, loggingIn := onLogin[username]
if loggingIn {
fmt.Println("Possible double connect attempt", username)
return nil
}
(...check if correct login info...)
(...check if user is already logged in...)
// remove from list before returning
delete(onLogin, username)
(...build and send back packet to client if login success or fail...)
它有帮助(一点点)但是当有人能够在不人道的同时按下 2 个客户端上的登录按钮时,它仍然会通过。也许我的设计有缺陷?有什么建议吗?干杯!
慕哥6287543
相关分类