当前位置: 首页 > 知识库问答 >
问题:

如何使用Netty从单独的线程发送WebSocket消息?

子车劲
2023-03-14

我试图使用Netty 4.0.8创建一个相当简单的WebSocket服务器。我有基本的握手设置和工作。但是从一个单独的线程发送的消息似乎没有传到客户端。

客户机/服务器交互的工作方式是,客户机启动连接,然后通过WebSocket发送初始消息(“hello”)。服务器立即响应。此消息通过Chrome开发工具传递并可见。写入此消息后,我将频道存储在频道组中。此ChannelGroup初始化如下:

this.broadcastGroup = new NioEventLoopGroup();
this.group = new DefaultChannelGroup("websocket", broadcastGroup.next());

然后添加频道,如下所示:

group.add(ctx.channel());

在单独的线程(在Netty之外创建)中,我执行以下操作:

group.write(new TextWebSocketFrame("text"));

但是,此消息从未出现在Chrome开发工具中。

我尝试过调试,我可以看到当调用group.write()时,原始的Channel在组中,但这是我所能得到的。

共有2个答案

祁飞扬
2023-03-14

没有关系。原来问题是我忘了给组打电话。flush()

阮阳曦
2023-03-14

检查返回的通道未来。。最有可能的是写操作的未来失败了。也许是你在握手结束前写的?

 类似资料:
  • 我是如何临时修复它的:考虑我已经实现了下面的方法 它向websocket会话发送一个TextMessage。我无法使整个方法同步,因为多个线程可以为不同的websocketSessions和消息调用它。我也不能将会话放在同步块中(尝试了但没有工作) 虽然,我这样解决了我的问题

  • 我有一个工作的WebSocket示例,其中客户端从服务器接收消息。 我不确定当客户端连接时,我应该如何向客户端发送旧消息。 示例: 每个客户端在连接时提供其名称 服务器响应“[名称] 刚刚连接”(对所有客户端) 任何新客户端都不会收到这些消息 我想知道客户端是否有任何方法可以接收旧消息(所有消息或过去 5 分钟内的消息都可以接受)。 我怀疑我可能需要自己捕获这些信息,将其存储在某个地方(如数据库)

  • 将运行在JDK6-8下的现有web套接字客户端部署到Android(API 19)会使客户端无法将web套接字帧发送到服务器。 发生正常的http升级,并且存在http连接,但使用ChannelHandlerContext发送的任何消息都不存在。writeAndFlush()永远不要越界(我已经在服务器上与Wireshark确认了这一点)。 //从IClientConnection的实现 publ

  • 我正在通过在WebSocketClientFlow上遵循doc来尝试客户端websocket。

  • 问题内容: 您能解释一下Netty如何使用线程池工作吗?我是否正确理解,线程池有两种:老板线程和工人线程。老板用于执行I / O,而worker用于调用用户回调(messageReceived)来处理数据? 问题答案: 这是来自NioServerSocketChannelFactory文档 一个ServerSocketChannelFactory,它创建一个基于NIO的服务器端ServerSock

  • 我在服务器端有以下代码: 客户端代码: 我的行动: 我运行应用程序,以的身份登录,并启动从客户端到服务器的消息发送,我看到方法是invokes和line成功执行,但我在客户端没有看到该消息。 我怎么能 Spring Security配置: Web套接字配置: 在建议和阅读主题后,我尝试了以下方式向Spring WebSocket上的特定用户发送消息: 服务器端: 客户端: 服务器端: 客户端: 服