我试图使用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
在组中,但这是我所能得到的。
没有关系。原来问题是我忘了给组打电话。flush()
检查返回的通道未来。。最有可能的是写操作的未来失败了。也许是你在握手结束前写的?
我是如何临时修复它的:考虑我已经实现了下面的方法 它向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上的特定用户发送消息: 服务器端: 客户端: 服务器端: 客户端: 服