双向网络服务器

问题描述 投票:0回答:1

我有一台服务器,它需要与客户端进行双向连接,并需要为几个网站提供Web服务。 实际上,Web服务是将网站请求植根于客户的经销商。

方案是:

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

如您在场景中所见,服务器需要向客户端发送未经请求的消息,并立即获得响应以服务网站。

首先,我实现了一个多线程双向套接字解决方案,该解决方案对于少数客户端来说效果很好,但是遇到了性能问题,不幸的是我们有超过1万个并发用户。

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

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

**任何反馈,建议和知识共享均受到高度赞赏

java web-services sockets netty bidirectional
1个回答
3
投票

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

术语“ 客户端”和“ 服务器”实际上并不适用于已建立的 TCP连接,但是某些协议(例如HTTP)当然可以区分连接端点的角色。

因此,不,就Avro链接而言,Netty并非单向的-这可能是Avro如何使用和公开Netty功能的结果。

在您的情况下,“经销商”需要管理代表客户端连接和网站连接的活动通道,并协调它们之间发送和接收的消息。 这没什么特别的,您可能会发现一些类似的示例和解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.