Java 使用netty socketio服务器限制WebSocket

Java 使用netty socketio服务器限制WebSocket,java,websocket,socket.io,netty,Java,Websocket,Socket.io,Netty,我们正在使用 应用场景:服务器正在通过websocket高速向客户端推送消息 最近我们遇到了一个问题,客户端无法处理来自socket.io服务器的所有事件消息。websocket消息开始堆积,客户端变得无响应。在Chrome开发工具中,我们可以看到客户端内存逐渐增加 使用wireshark对tcpdump进行分析表明,发生了大量重传,客户端无法处理 我们计划在服务器端设置一个限制机制。是否有任何事件/回调可用于检测慢速客户端,以便我们可以在服务器端开始限制此特定websocket?是Channe

我们正在使用

应用场景:服务器正在通过websocket高速向客户端推送消息

最近我们遇到了一个问题,客户端无法处理来自socket.io服务器的所有事件消息。websocket消息开始堆积,客户端变得无响应。在Chrome开发工具中,我们可以看到客户端内存逐渐增加

使用wireshark对tcpdump进行分析表明,发生了大量重传,客户端无法处理


我们计划在服务器端设置一个限制机制。是否有任何事件/回调可用于检测慢速客户端,以便我们可以在服务器端开始限制此特定websocket?

Channel.iswriteable()
是一个很好的起点。为了简化一点,当通道的出站缓冲区中有太多挂起的出站字节时,它返回
false
。您可以一直发送,直到
Channel.iswriteable()
返回
false
。当通道的可写性更改时,您的处理程序将收到
channelwriteabilitychanged()
事件的通知。然后,你可以继续转学

public void generateTraffic(ChannelHandlerContext ctx) {
    while (ctx.channel().isWritable()) {
        ctx.write(...);
    }
}

public void channelWritabilityChanged(ChannelHandlerContext ctx) {
    generateTraffic(ctx);
}
在实际应用程序中,您需要维护一些有状态的信息,以确定何时应该发送什么消息

另外,请查看
ChannelConfig.writeBufferHigh/LowWatermark
属性,以配置
isWritable()
何时开始返回
false
true