tcp心跳模型

1. 客户端写空闲4s发一次心跳

2. 服务端收到心跳回复

3. 服务端读空闲 (n个4s) + x未收到心跳,close channel

4. 客户端读空闲 (n个4s) + x未收到回复,重连

5. n取2为推荐,x取1

 

 

 

对于netty而言:

客户端:

	@Override
	public void userEventTriggered(final ChannelHandlerContext ctx, Object evt) throws Exception {
    	
    	if(evt instanceof IdleStateEvent) {
    		IdleStateEvent event = (IdleStateEvent) evt;
    		if(event.state() == IdleState.WRITER_IDLE) {
// 好久(30s)没给服务端传数据了,给个心跳^^ping sendHeartbeat(ctx); } else if (event.state() == IdleState.READ_IDLE) { ctx.close(); logger.warn("服务端好几次未回传pong"); } } }

  R 61 W 30

服务端:

	@Override
	public void userEventTriggered(final ChannelHandlerContext ctx, Object evt)
    		throws Exception {
    	
    	Channel channel = ctx.channel();
    	if(evt instanceof IdleStateEvent) {
    		IdleStateEvent event = (IdleStateEvent) evt;
    		if(event.state() == IdleState.READ_IDLE) {
    			logger.debug("客户端按约定已经n次超时未传输数据过来");
        		channel.close();
    		}
    	}
    }

  R 61

https://stackoverflow.com/questions/10585355/sending-websocket-ping-pong-frame-from-browser

 

关于本文的实践位于:https://www.cnblogs.com/silyvin/articles/9796887.html

转载于:https://www.cnblogs.com/silyvin/p/9605033.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值