作者回复: 网络阻塞和滑动窗口都是底层传输层的事情呀,和上层的websocket没啥关系,如果有由于传输内容大导致拥塞的问题需要解决的是websocket封装的业务内容是否足够精简,是否需要进一步压缩,和websocket本身无关。websocket自带的心跳机制浏览器很多并不自动支持,所以一般都是自己应用层来实现,自带的心跳机制只要服务端过滤掉也并不会影响连接本身的稳定性。所以最好还是通过双端抓包来具体分析,也有可能是由于链路中间的反向代理等服务导致的。
作者回复: 👍
作者回复: 直播那一章课程里有讲到哈,简单的话就用redis的发布订阅就可以。所有网关机订阅所有房间消息,各网关机认领本机维护的房间用户信息并下推。
作者回复: 有点小问题:离线消息建议在消息存储完后就存上,这样离线buffer里的消息是连续的,便于后续检查获取。另外还需要清除 待ack列表中这条消息。
作者回复: 针对发送方设备,不需要回推这条消息,但是需要能更新最新一条消息的“版本号”或者“时间戳”,因为这个是在服务端才生成的,这样发送方设备就就能正确更新本地的消息“版本号”了。
作者回复: 你说的这个是示例代码运行的问题吗?示例代码默认会通过embedded 的方式在jvm里自动启动一个兼容redis协议的模拟redis供使用。如果本机还额外起了redis的话需要看下端口是否存在冲突。
作者回复: 嗯,看了一下确实存在这个问题,感谢反馈,最新代码已经修复这个问题啦,把待ack列表放入到channel的attr里面了,避免复用导致混乱的问题。
作者回复: 对于经过认证的用户,实现上可以不需要再带上发送方uid,这里是想网关机不依赖认证信息,实现上网关机从session获取完全没问题。另外这里只是个演示demo,线上的话起码会走tls的wss协议。