我正在为我的客户端到服务器应用程序创建登录服务器。服务器到客户端的服务器身份验证 - 单线程
基本上有5个服务器,并且所有这些服务器都连接到一个登录服务器。
客户端可以连接到这5台服务器中的任何一台,但需要使用用户名和密码进行认证。身份验证应该在登录服务器中完成,并且登录服务器应该向实际的服务器返回应答,以便将答案返回给客户端。
因此,它像:
客户端 - >服务器 - >登录服务器 - >服务器 - >客户端(响应代码)
现在,我使用的Netty和它的NIO,它不是thread-每个客户端。现在,为了与NIO进行身份验证,我们必须等待来自登录服务器的响应,这可能需要一段时间并延迟其他希望登录的客户端,实际上,您不能等待NIO的解答。所以我想到了一个想法,我该如何让它工作。我的想法是在不同的线程上运行请求,并使用onResponse(String key, int responseCode)
方法处理事件,然后将客户端的频道放入带有生成密钥的地图中,这样我们就可以知道响应属于哪个人。所以当我们进行身份验证时,我们会发送密钥和用户数据。
但我觉得这是一个坏的方法,有一个更有效的方法来做到这一点。有任何想法吗?
AFAIK netty支持使用每个连接的线程来阻塞NIO。请注意,NIO的* default *行为是阻塞操作,直到最近只有Socket支持非阻塞操作作为选项。 –
在多服务器环境中,使用地图保留通道时会被破坏。 – eg04lt3r
只是一个建议,因为你要求更好的方法来做到这一点 - 如果你使用Java,你可能需要查看websockets,例如html 5 + http(s)。然后,您为每个客户端模型获得一个线程,使用加密进行身份验证对您的应用程序是透明的,并且您可以获得NIO的所有功能,而无需部署最终客户端。 – MuffinMan