【问题标题】:Netty Server, at the same time need to be a clientNetty Server,同时需要是客户端
【发布时间】:2018-11-19 15:42:19
【问题描述】:

我想创建一个服务器让客户端连接,所以从这一点来看,它只是一个服务器。但是,与此同时,这台服务器——我们称之为“服务器 A”——它需要连接到另一台服务器(我称之为“服务器 B”)来报告自己的信息,而不是作为路由数据的代理客户端到“服务器 B”,只报告它的信息,如“我仍然在线”。

因此,许多客户端将连接到“服务器 A”,而“服务器 A”将作为客户端连接到“服务器 B”。如何使用 Netty 做到这一点?

我阅读了 netty 的代理示例,但我认为代理服务器在接收到客户端的临时连接时会创建一个客户端。但是我需要一个专门的客户端角色来实现“服务器 A”上的这个目的,而不是那样。帮帮我,谢谢。

【问题讨论】:

    标签: networking netty


    【解决方案1】:

    您可以在channelActive 或您的服务器 A 处理程序的任何其他方法中将您的客户端引导到服务器 B。然后,一旦客户端引导成功,您就可以使用客户端向服务器 B 发送任何消息。

    这里有一个例子: https://github.com/normanmaurer/netty-in-action/blob/2.0-SNAPSHOT/chapter8/src/main/java/nia/chapter8/BootstrapSharingEventLoopGroup.java

    您可以为ServerChannel 设置handler,而不是为您的服务器设置childHandler。然后它的方法将只为服务器调用一次,而不是为每个客户端连接调用。

    【讨论】:

    • 如果我在活动通道中引导客户端,这意味着当服务器 A 接收到客户端连接时,该引导代码将运行。如果服务器 A 的第二个客户端链接,引导代码再次运行?如果当客户端连接到服务器 A 时这是真的,我将获得越来越多的客户端实例(链接到服务器 B),这不是我想要的。如果我错了,请纠正我。
    • 我已经编辑了答案。为您的目的使用处理程序而不是 childHandler
    • 我已经尝试过您的解决方案,它确实有效。谢谢你。将在下班后接受您的回答。
    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多