基本功:关于长连接那点事

玩rpc、Netty、连接池的童鞋一定知道长连接,TCP 本身并没有长短连接的区别,长短与否完全取决于我们怎么用它。通常要求高性能需要完成端到端频繁通信以及连接个数受限的系统交互一般都采用长连接。另外长连接还常常被用来做数据的推送,可以很方便的实现 push 模型。

短连接

每次通信时,创建 Socket,完成三次握手,一次通信结束,调用socket.close()关闭。这就是一般意义上的短连接,短连接的好处是管理起来比较简单,不需要额外的控制手段。

长连接

每次通信完毕后,不会关闭连接,这样可以做到连接的复用,长连接的好处是省去了创建连接(三次握手)的耗时。

在分布式的中,网络的不可用随时发生,使用长连接需要考虑很多问题:

  • 连接的管理维护,比较好理解就是可以获取、新增、释放连接,一般情况下Server/Client端需要(Map<Host, Channel> channels; //Host=ip:port)容器管理连接
  • 连接的保活之前讲过

比如拿我们熟悉的Dubbo(20880)来理解 TCP

可以使用一个 client 负责循环发送请求,shell中通过命令:lsof -i:20880 查看端口相关使用情况(参数FD 代表了文件句柄,每一条连接都会占用新的文件句柄,如果你在使用 TCP 通信的过程中出现了 open too many files 的异常,那就应该检查一下,你是不是创建了太多连接,而没有关闭,最多也就7w多个)

短连接没有太多东西可以讲,长连接的管理在高并发中确实不易,比如druid的连接池中就用到了生产者-消费者模型,内部实现也相对的复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值