gpt4 book ai didi

java - 使用 netty-socketio 服务器限制 websocket

转载 作者:行者123 更新时间:2023-11-30 03:31:46 31 4
gpt4 key购买 nike

我们正在使用 https://github.com/mrniko/netty-socketio .

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

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

使用wireshark分析tcpdump,发现有大量重传发生,客户端无法应对。

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

最佳答案

是的。 Channel.isWritable() 是一个很好的起点。为了简化一点,当 channel 的出站缓冲区中有太多挂起的出站字节时,它会返回 false。您可以继续发送,直到 Channel.isWritable() 返回 false。当 channel 的可写性发生变化时,您的处理程序将收到 channelWritabilityChanged() 事件的通知。然后,您可以恢复传输。

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

public void channelWritabilityChanged(ChannelHandlerContext ctx) {
generateTraffic(ctx);
}

在真实的应用程序中,您需要维护一些状态信息来确定何时发送什么消息。

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

关于java - 使用 netty-socketio 服务器限制 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28862613/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com