java - netty 4 如何从服务器发送消息

标签 java netty

我如何从服务器本身发送消息,而不是从 MessageHandlers 发送消息?我知道 InetSocketAddress,我从 MessageHandler 存储它,但我看不到任何直接使用套接字的方法。

例如:

public class QuoteOfTheMomentServer {

    private final int port;

    public QuoteOfTheMomentServer(int port) {
        this.port = port;
    }

    Bootstrap b;

    public void run() throws Exception {
        b = new Bootstrap();
        try {
            b.group(new NioEventLoopGroup())
             .channel(NioDatagramChannel.class)
             .option(ChannelOption.SO_BROADCAST, true)
             .handler(new QuoteOfTheMomentServerHandler());

            b.bind(port).sync().channel().closeFuture().await();
        } finally {
            b.shutdown();
        }
    }

    public static void main(String[] args) throws Exception {
        int port;
        if (args.length > 0) {
            port = Integer.parseInt(args[0]);
        } else {
            port = 8080;
        }
        new QuoteOfTheMomentServer(port).run();
    }
}

我如何添加类似的方法

public void sendMessage(ByteBuf msg, InetSocketAddr addr) {
    b.send(msg, addr);
}

最佳答案

只需存储对 channel 的引用并使用:

channel.write(new DatagramPacket(
                Unpooled.copiedBuffer("QOTM?", CharsetUtil.UTF_8),
                new InetSocketAddress(ip, port)));

您可以从任何线程以及处理程序外部调用channel.write

关于java - netty 4 如何从服务器发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434213/

相关文章:

java - kotlin-jpa 插件不生成默认构造函数

java - 在 Spring 中实现 JpaRepostiory 时使用存储库注释

java - 错误 : Upgrade Fragment version to at least 1. 3.0。 [InvalidFragmentVersionForActivityResult]

java - Netty - 是否需要释放 Unpooled.unreleasableBuffer 的内存

java - 使用自定义类作为 JAX-WS 返回类型?

java - 基于服务器的 SwingWorker 不会停止

java - 网络 4 : set default endianness of ByteBuf

netty - ThreadLocalRandom 中缺乏内生素的条件

java - 大量小额传输的Netty App设计

java - 无法使用 netty 发送对象