0
点赞
收藏
分享

微信扫一扫

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


玩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​

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

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

举报

相关推荐

0 条评论