gpt4 book ai didi

java - 双向 Netty 服务器

转载 作者:行者123 更新时间:2023-12-01 22:49:51 25 4
gpt4 key购买 nike

我有一个服务器,需要与客户端进行双向连接,并为少数网站提供网络服务。实际上,Webservice是一个将网站的请求发送给客户端的经销商。

场景是:

  1. Dealer 启动其 Web 服务,同时监听端口 12345。
  2. 客户端 A 将其用户名发送到经销商的端口 12345,并继续监听同一端口。
  3. 经销商接收用户名、验证用户并保持与用户的连接。
  4. Website-1 从经销商的 Web 服务中调用 doOperation(operation-X,User-A)。
  5. Dealer 检查 user-A 是否存在,并向其发送“操作-X”请求。
  6. 用户A调用“Operation-X”并将结果发送回经销商。
  7. 经销商将结果发送回网站。

正如您在场景中看到的,服务器需要向客户端发送未经请求的消息并立即获得响应来为网站提供服务。

首先,我实现了一个多线程双向套接字解决方案,该解决方案对于少数客户端来说运行良好,但出现了性能问题,不幸的是我们有超过 10k 的并发用户。

然后,我找到了netty。这看起来是一个非常有前途的解决方案。但它的异步和事件驱动性质让我担心。还有一些,似乎是单向的。 http://apache-avro.679487.n3.nabble.com/Writing-Unsolicited-Messages-to-a-Connected-Netty-Client-td3675163.html

所以问题是如何进行异步握手(例如: http://biasedbit.com/handshaking-tutorial-with-netty/ ),然后从经销商发送请求并获得结果?

** 非常感谢任何反馈、建议和知识分享

最佳答案

Netty 允许您通过 TCP 编写任何类型的协议(protocol)(实际上,UDP 和其他协议(protocol)也是如此,但我们还是只使用 TCP)。一旦两方之间建立了 TCP 连接,任何一方都可以根据某种协议(protocol)随时发送数据。

术语客户端服务器并不真正适用于已建立 TCP 连接,但某些协议(protocol)(例如 HTTP)当然会区分连接端点的角色之间。

所以,不,从 Avro 链接的意义上来说,Netty 并不是单向的——这可能是 Avro 如何使用和公开 Netty 功能的结果。

就您而言,“经销商”需要管理代表客户端连接和网站连接的 Activity channel ,并协调它们之间发送和接收的消息。这没什么特别的,您可能会找到几个类似的示例和解决方案。

关于java - 双向 Netty 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com