客户端的服务器到服务器身份验证 - 单线程

Mit*_*tch 5 java networking multithreading netty

我正在为我的客户端到服务器应用程序创建一个登录服务器.

基本上有5台服务器,所有这些服务器都连接到一台登录服务器.

客户端可以连接到这5个服务器中的任何一个,但需要使用用户名和密码进行身份验证.身份验证应该在登录服务器中完成,登录服务器应该返回应该将答案返回给客户端的实际服务器的答案.

就像那样:

客户端 - >服务器 - >登录服务器 - >服务器 - >客户端(响应代码)

现在,我使用的是Netty,它是NIO,它不是每个客户端的线程.现在,要通过NIO进行身份验证,我们必须等待从登录服务器到达的响应,这可能需要一段时间并延迟其他想要登录的客户端,实际上您不能只是等待NIO的回答,就像那样.所以我想到了如何让它发挥作用的想法.我的想法是在不同的线程上运行请求并使用onResponse(String key, int responseCode)方法生成事件,然后将客户端的通道放在带有生成密钥的映射中,这样我们就可以知道响应属于谁.因此,当我们进行身份验证时,我们会发送密钥和用户的数据.

但我觉得这是一种糟糕的方式,并且有一种更有效的方法来做到这一点.有任何想法吗?

jpo*_*pou 2

假设您完全控制所有系统:

为服务器中的每个客户端连接分配一个 ID。然后当需要验证用户身份时,将这个连接ID包含在服务器向登录服务器发出的请求中并返回,而无需等待登录服务器的回复。

将来的某个时间,您的服务器将收到来自登录服务器的登录响应。如果登录响应包含客户端连接 ID - 使用该 ID 查找从服务器到客户端的连接并将该回复转发回客户端。