我正在尝试使用 Netty 4.0.8 创建一个相当简单的 WebSocket 服务器。我已经设置并工作了基本的握手。但是从单独的线程发送的消息似乎没有传递到客户端。
客户端/服务器交互的工作方式是客户端启动连接,然后通过 WebSocket 发送初始消息("hello")。服务器会立即响应。此消息会显示在 Chrome 开发者工具中。写入此消息后,我将Channel
存储在ChannelGroup
中。此ChannelGroup
初始化如下:
this.broadcastGroup = new NioEventLoopGroup();
this.group = new DefaultChannelGroup("websocket", broadcastGroup.next());
然后像这样添加Channel
:
group.add(ctx.channel());
在一个单独的线程(在 Netty 之外创建)中,我这样做:
group.write(new TextWebSocketFrame("text"));
但是,此消息永远不会显示在 Chrome 开发者工具中。
我尝试过调试,我可以看到当调用group.write()
时,原始Channel
在组中,但这是我所能得到的。
检查返回的 ChannelFuture。写入的 ChannelFuture 很可能失败了。也许你在握手完成之前写的?
关系。原来问题是我忽略了打电话group.flush()