当前位置: 首页 > news >正文

09网络深入连贯篇(D1_彻底理解长连接 短连接(一))

目录

讲解一:长连接 & 短连接

一、初次见证长连接和短连接

1. 长连接

2. 短连接

二、如何区分当前连接是长连接还是短连接?

三、如何查询长连接和短连接?

四、那么长连接与短连接操作过程又是如何呢?

五、各自优缺点

1. 长连接(Long Connection)

2. 短连接(Short Connection)

六、具体应用场景

1. 长连接

2. 短连接

3. 小结

七、知识小结

--------------------------------------

讲解二:从HTTP协议视角看长连接 & 短连接

一、HTTP协议层次上对长连接 & 短连接的理解

二、长连接的保活

1. 连接的保活:KeepAlive(TCP保活)

2. 连接的保活:应用层心跳(Http保活,http keepalive)

3. 实践

三、 报文发送接收方式

四、 报文格式

--------------------------------------

讲解三:从负载均衡视角看待长连接 & 短连接差异

一、长连接、短连接遇负载均衡,差异在哪?

1. 负载均衡算法

2. 长连接下的负载均衡实践

3. 知识小结

--------------------------------------

讲解四:一堆实际应用场景题

一、物联网上如何对长连接与短连接之间做出抉择?

二、短视频直播系统如何对长连接与短连接之间做出抉择?

三、手游开发网络通信中如何对长连接与短连接之间做出抉择?

四、IM系统聊天通信如何对长连接与短连接之间做出抉择?

五、AFSIM通信服务器后端对长连接与短连接之间做出抉择?仿真推演系统

1. 长连接在AFSIM仿真推演系统中的应用

2. 短连接在AFSIM仿真推演系统中的应用

3. 选择建议

--------------------------------------

参考文献


讲解一:长连接 & 短连接

一、初次见证长连接和短连接

注:这里的双方指客户端和服务端

1. 长连接

长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次

消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一

次完整的长连接。

HTTP 1.1相对于1.0最重要的新特性就是引入了长连接。

怎么说呢?

意思就是指在一个TCP连接上可以发送多个数据包,但是如果没有数据包发送时,也要双方发检

测包以维持这个连接。

还不理解?

就是client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。

这种方式下由于通讯连接一直存在,此种方式常用于P2P通信。

何为P2P通信?

P2P即点对点协议。

当A和B通信的时候,最简单的方式如下,A和B之间通过一个服务器转发数据。

而P2P是这样的,双方直接进行通信。

这种方式能大大减轻服务端的负载,所以特别适合大数据的传输,比如实时音视频聊天、在线视

频直播、大文件传输等应用场景。

2. 短连接

短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,立刻发送FIN消息,主

动释放连接。

也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都

称为短连接。

注:短连接是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议。

现在还不理解?好吧,再来一遍

短连接就是指当双方需要有数据交互的时候,就建立一个TCP连接,本次交互完成后,就断开这个连

接。

你还不理解啊?欧克,在学习一下

意思就是Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连

接。

此方式常用于一点对多点通讯。

何为一对多通讯?

一对多通讯就是指一个发送方同时向多个接收方传输信息的通信方式。

二、如何区分当前连接是长连接还是短连接?

奥,终于明白什么是短连接,什么是长连接了,那我们该如何区分当前连接是长连接还是短连

接?

1、凡是在一次完整的消息交互(发请求-收响应)之后,立刻断开连接(有一方发送FIN消息)的

情况都称为短连接;

短连接意味着每一次的数据传输都需要建立一个新的连接,用完再马上关闭它,下次再用的时候

重新建立一个新的连接,如此反复。

它的优势是由于每次使用的连接都是新建的,所以基本上只要能够建立连接,数据就大概率能送

达到对方,并且哪怕这次传输出现异常也不用担心影响后续新的数据传输,因为届时又是一个新

的连接。

缺点是每个连接都需要经过三次握手和四次握手的过程,耗时大大增加。

另外,短连接还有一个致命的缺点

在一台计算机上只要这五元组的值不重复,那么连接就可以被建立。

然而一台计算机最多只能开启 65535 个端口,如果现在两个进程之间需要通信,作为服务端的

IP 和端口必然是固定的,因此单个客户端理论上最多只能与服务端同时建立 65535 个 socket 连

接。

如果除去操作系统和其它进程所占用的端口,实际还会更少。

所以,一旦使用不当,在很短的时间内建立了大量连接,端口很容易被占用完。

这不但会导致自身无法正常工作,还会影响到同一台计算机上的其它进程。

2、长连接的一个明显特征是会有心跳消息(也有没有心跳的情况),且一般心跳间隔都在30S或

者1MIN左右,用wireshark抓包可以看到有规律的心跳消息交互(可能会存在毫秒级别的误

差)。

长连接意味着进行一次数据传输后,不关闭连接,长期保持连通状态。

如果两个应用程序之间有新的数据需要传输,则直接复用这个连接,无需再建立一个新的连接。

它的优势是在多次通信中可以省去连接建立和关闭连接的开销,并且从总体上来看,进行多次数

据传输的总耗时更少。

缺点是需要花费额外的精力来保持这个连接一直是可用的,因为网络抖动、服务器故障等都会导

致这个连接不可用,甚至是由于防火墙的原因。

所以,一般我们会通过下面这几种方式来做“保活”工作,确保连接在被使用的时候是可用状态:

利用 TCP 自身的保活(Keepalive)机制来实现,保活机制会定时发送探测报文来识别对方是否

可达。一般的默认定时间隔是 2 小时,你可以根据自己的需要在操作系统层面去调整这个间隔,

不管是 linux 还是 windows 系统。

上层应用主动的定时发送一个小数据包作为“心跳”,探测是否能成功送达到另外一端。

保活功能大多数情况下用于服务端探测客户端的场景,一旦识别客户端不可达,则断开连接,缓

解服务端压力。

如果在做了高可用的分布式系统场景中运用长连接会更麻烦一些。

因为高可用必然包含自动故障转移、故障隔离等机制。

这恰恰导致了一旦发生故障,客户端需要及时发现哪些连接已处于不可用状态,并进行相应的重

连,包括重新做负载均衡等工作。

三、如何查询长连接和短连接?

如果我们想查询某个网站使用的连接方式,可以采用以下几种方法:

  1. 查看网站源代码:通常情况下,网站的开发者会在代码中指定连接方式。我们可以通过查看网站的源代码来判断该网站是采用长连接还是短连接。
  2. 使用网络抓包工具:网络抓包工具可以帮助我们捕获网站的数据包,包括请求和响应的内容。通过观察数据包的特征,我们可以判断该网站使用的是长连接还是短连接。
  3. 查看网络请求头:在进行网络请求时,我们可以通过查看请求头中的信息来判断连接方式。如果请求头中包含 "Connection: Keep-Alive",则说明该网站使用的是长连接。反之,则说明使用的是短连接。

需要注意的是,某些网站可能采用双重连接模式,即在短连接的基础上再次使用长连接。

这种方式比较复杂,需要通过抓包等高级技术才能进行判断。

总之,查询长连接和短连接的方法有多种,我们只需要选择合适的方法即可。

对于网站开发者来说,选择合适的连接方式也是十分重要的,可以提高网站的性能和用户体验。

四、那么长连接与短连接操作过程又是如何呢?

短连接的操作步骤是:建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连

接长连接的操作步骤是:建立连接——数据传输…(保持连接)…数据传输——关闭连接

五、各自优缺点

现在大家应该会了解长连接、短连接的各自优缺点了吧?

长连接可以省去较多建立连接和关闭连接的操作,所以比较节省资源和时间,但是长连接如果一直

存在的话,第一需要很多探测包的发送来维持这个连接,第二对服务器将是很大的负荷

相对而言,短连接则不需要服务器承担太大负荷,只要存在的连接就都是有用连接,但如果客户端请

求频繁,就会在TCP的建立连接和关闭连接上浪费较大的资源和时间

1. 长连接(Long Connection)

优点

  1. 低延迟:减少了频繁建立和断开连接的开销,降低了通信延迟。
  2. 高效的数据传输:可以在同一个连接上进行多次数据交换,提高了数据传输效率。
  3. 实时性:适用于需要实时双向通信的应用,如即时通讯、在线游戏等。
  4. 会话保持:服务器可以保存客户端的会话信息,便于进行状态管理和个性化服务。

缺点

  1. 资源占用多:连接一旦建立,在没有特殊情况下会一直保持,占用服务器资源。
  2. 复杂性增加:需要额外的机制来管理连接的生命周期和状态,增加了实现的复杂性。
  3. 潜在的连接中断风险:长时间不活动的连接可能会被中间设备(如路由器)中断。
  • 不适合短时请求:对于短时的、独立的请求,长连接的建立和维护成本可能高于其带来的好处。

2. 短连接(Short Connection)

优点

  1. 资源占用少:每次通信结束后立即释放连接,不需要长时间占用服务器资源。
  2. 简单易实现:实现起来相对简单,不需要复杂的连接管理机制。
  3. 无状态性:服务器不保留客户端的任何会话信息,适用于无状态的RESTful服务。
  4. 防止资源泄漏:可以有效防止因长时间连接导致的资源泄漏问题。

缺点

  1. 高延迟:每次请求都需要重新建立连接,增加了通信延迟。
  2. 频繁的连接开销:在高并发场景下,频繁的连接建立和断开会消耗大量系统资源。
  3. 不适合实时性要求高的应用:对于需要频繁通信和实时响应的应用,短连接的性能表现不佳。

六、具体应用场景

1. 长连接

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况

(服务器需要为每一个长连接创建计时器之类的资源,如果连接太多浪费资源,服务器扛不

住)。

为什么这样说呢?

因为每个TCP连接的建立都需要三次握手,每个TCP连接的断开要四次握手。

如果是这样,每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的

话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不

用建立TCP连接,这样能够更好的避免资源浪费。

举几个应用例子

  • HTTP/1.1 引入了持久连接(Keep-Alive)特性,允许在同一个TCP连接上发送多个请求。
  • WebSocket 协议是基于TCP的长连接,提供了全双工通信的能力。
  • 数据库的连接用长连接:如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费,如数据库连接池为了提高性能,会维持一定数量的数据库连接。

举几个场景例子

1. 即时通讯

  • 场景描述: 用户通过聊天应用进行实时对话。
  • 原因: 需要低延迟的双向通信,长连接可以保持连接的持续性,确保消息的及时传递。
  • 详细描述:如即时通信工具(微信/QQ,QQ也有UDP)这种需要频繁交互的场景就需要使用长连接,(比如QQ)一般使用的是长连接(UDP长连接),但并不是永久连接,一般也会有一个保持的时间,比如30分钟,24小时等,因为即时通讯是频繁的发送请求,使用长连接只需要建立一次连接,比较划算,同时再根据业务设置保持时间,超过这个时间就断开连接,也一定程度上保证了服务器的压力不会过大同理,网络游戏一般也使用长连接,同理即时通讯。

2. 在线游戏

  • 场景描述: 用户在多人在线游戏中进行互动。
  • 原因: 游戏需要实时的状态同步和频繁的数据交换,长连接可以提供高效的通信机制。

3. 推送服务

  • 场景描述: 应用需要向客户端推送通知或更新。
  • 原因: 长连接可以保持与客户端的持久连接,实现实时推送功能。

4. 股票交易系统

    • 场景描述: 投资者实时查看股票行情并进行交易。
    • 原因: 需要快速响应市场变化,长连接可以减少通信延迟,提高交易效率。

    5. 在线视频流媒体

      • 场景描述: 用户观看实时直播或点播视频。
      • 原因: 视频流需要持续的数据传输,长连接可以保证数据的稳定传输,减少缓冲时间。

      2. 短连接

      举几个应用例子

      • HTTP/1.0 默认使用短连接,每次请求都需要重新建立TCP连接。
      • RESTful API 服务通常采用短连接方式。

      举个几个场景例子

      1. Web浏览

        • 场景描述: 用户通过浏览器访问各种网页。
        • 原因: 每个网页请求通常是独立的,使用短连接可以简化服务器端的连接管理,减少资源占用。
        • 详细描述:只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。因为长连接对于服务端来说会耗费一定的资源,即一定的系统开销,而像Web网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,若同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧,用户量这么多的情况下,并发量大,便很容易看出系统瓶颈,就很有可能把服务器资源(内存/CPU/网卡)耗尽,所以说每个用户无需频繁操作情况下还是使用需用短连好。衍生到实际产品:像京东,淘宝这些大型的电商平台,随时随刻有成千上万的用户对服务端发送请求,一般也是使用短连接,正如前面所说,因为如果用长连接的话,用户越来越多,服务器一般也扛不住这么多长连接,其实现在的大部分网站,使用的都是短连接,应该还是服务器压力的问题吧

        2. RESTful API服务

        • 场景描述: 提供标准的HTTP接口供外部系统调用。
        • 原因: RESTful API设计原则是无状态的,每次请求都是独立的,短连接符合其设计理念。

        3. 文件上传/下载

          • 场景描述: 用户上传或下载文件到服务器。
          • 原因: 文件传输完成后,连接可以立即关闭,避免长时间占用资源。

          4. 批量数据处理

            • 场景描述: 客户端发送一批数据到服务器进行处理。
            • 原因: 数据处理完成后,连接可以关闭,适用于一次性的大数据量传输。

            5. 物联网设备通信

              • 场景描述: 物联网设备定期发送数据到服务器。
              • 原因: 设备通常不需要频繁通信,短连接可以减少不必要的资源占用。

              3. 小结

              再来一段长白话

              长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况(服务器需要为每一个长连接

              创建计时器之类的资源,如果连接太多浪费资源,服务器扛不住)。每个TCP连接都需要三步握

              手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操

              作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用

              长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪

              费。

              而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像

              WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,

              而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量

              大,但每个用户无需频繁操作情况下需用短连好。再来个简单梳理

              短连接适用场景:

              • 请求频率不高且每次请求数据量较小的应用。
              • 无状态的RESTful API服务。
              • 对实时性要求不高的Web应用。

              长连接适用场景:

              • 需要频繁通信和实时响应的应用,如实时聊天、在线游戏。
              • 需要保持会话状态的服务,如在线购物车、用户登录状态管理。
              • 高并发且每次请求数据量较大的应用。

              七、知识小结

              选择长连接还是短连接取决于具体的业务需求和性能考虑。

              在高并发且需要频繁交互的场景下,长连接能够提供更好的性能;

              而在请求相对独立且不频繁的场景下,短连接则更为简单高效。

              实际应用中,可能需要根据实际情况进行权衡和优化。

              综合长连接短连接的优缺点,我们不难发现,这两种连接没有绝对的好坏之分,只能说在不同的场

              景使用不同的连接才是上策。

              --------------------------------------

              讲解二:从HTTP协议视角看长连接 & 短连接

              一、HTTP协议层次上对长连接 & 短连接的理解

              在HTTP/1.0中,默认使用的是短连接。

              也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

              如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如

              JavaScript文件、图像文件、CSS文件等;

              当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

              但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。

              使用长连接的HTTP协议,会在响应头有加入这行代码:

              Connection:keep-alive

              在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP

              连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

              Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设

              定这个时间。实现长连接要客户端和服务端都支持长连接。

              HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

              二、长连接的保活

              1. 连接的保活:KeepAlive(TCP保活)

              首先想到的是 TCP 中的 KeepAlive 机制。

              KeepAlive 并不是 TCP 协议的一部分,但是大多数操作系统都实现了这个机制。

              KeepAlive 机制开启后,在一定时间内(一般时间为 7200s,参数tcp_keepalive_time)在链路上没

              有数据传送的情况下,TCP 层将发送相应的KeepAlive探针以确定连接可用性,探测失败后重试

              10(参数tcp_keepalive_probes)次,每次间隔时间 75s(参数tcp_keepalive_intvl),所有探测失败

              后,才认为当前连接已经不可用。

              如果两端的 TCP 连接一直没有数据交互,达到了触发 TCP 保活机制的条件,那么内核里的 TCP

              协议栈就会发送探测报文。

              如果对端程序是正常工作的。当 TCP 保活的探测报文发送给对端, 对端会正常响应,这样 TCP

              保活时间会被重置,等待下一个 TCP 保活时间的到来。

              如果对端主机崩溃,或对端由于其他原因导致报文不可达。

              当 TCP 保活的探测报文发送给对端后,石沉大海,没有响应,连续几次,达到保活探测次数

              后,TCP 会报告该 TCP连接已经死亡。

              通过上述对端应该是服务端和客户端都维护了keepalive字段,都会到达时间发送报文进行验证。

              默认情况下使用 KeepAlive 周期为 2 个小时,如不选择更改,属于误用范畴,造成资源浪费:内

              核会为每一个连接都打开一个保活计时器,N 个连接会打开 N 个保活计时器。 优势很明显:

              • TCP 协议层面保活探测机制,系统内核完全替上层应用自动给做好了
              • 内核层面计时器相比上层应用,更为高效
              • 上层应用只需要处理数据收发、连接异常通知即可
              • 数据包将更为紧凑

              这个keepAlive只是保证系统层面上的保活,是由内核完成的,即保证tcp连接不断,但不能保证

              应用还存活。

              网络层面的 KeepAlive 不足以支撑应用级别的连接可用性

              2. 连接的保活:应用层心跳(Http保活,http keepalive)

              简单来说,就是客户端会开启一个定时任务,定时对已经建立连接的对端应用发送请求(这里的请

              求是特殊的心跳请求),服务端则需要特殊处理该请求,返回响应。如果心跳持续多次没有收到响

              应,客户端会认为连接不可用,主动断开连接。

              这个keepAlive只是保证应用层面上的保活

              3. 实践

              关闭 TCP 的 KeepAlive,完全使用应用层心跳保活机制。

              由应用掌管心跳,更灵活可控,比如可以在应用级别设置心跳周期,适配私有协议。

              业务心跳 + TCP KeepAlive 一起使用,互相作为补充,但 TCP 保活探测周期和应用的心跳周期

              要协调,以互补方可,不能够差距过大,否则将达不到设想的效果。

              三、 报文发送接收方式

              通过上面的讲述,我们大部分都是在讲解通信连接方式,但是并没有去讲述通信之后的数据到底

              如何发送的?难道不好奇?现在就让W哥带大家简单的了解了解。

              1、异步:报文发送和接收是分开的,相互独立,互不影响的。

              这种方式又分两种情况:

              • 异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接送。
              • 异步单工:接送和发送使用两个不同的程序来完成。

              2、同步:报文发送和接收是同步进行,即报文发送后等待接送返回报文。

              同步方式一般需要考虑超时问题,试想我们发送报文以后也不能无限等待啊,所以我们要设定一

              个等待时候。

              超过等待时间发送方不再等待读返回报文。

              直接通知超时返回。

              四、 报文格式

              继续追到底层,就会再次考虑数据报文类型,即报文格式有哪些?接下来,也让W哥带大家系统

              了解了解。

              通信报文格式多样性更多,相应地就必须设计对应的读写报文的接收和发送报文函数。

              1、阻塞与非阻塞方式:

              • 非阻塞方式:读函数不停的进行读动作,如果没有报文接收到,等待一段时间后超时返回,这种情况一般需要指定超时时间。
              • 阻塞方式:如果没有接收到报文,则读函数一直处于等待状态,直到报文到达。

              2、循环读写方式

              • 一次直接读写报文:在一次接收或发送报文动作中一次性不加分别地全部读取或全部发送报文字节。
              • 不指定长度循环读写:这一版发生在短连接进程中,受网络路由等限制,一次较长的报文可能在网络传输过程中被分解成很多个包,一次读取可能不能全部读完一次报文,这就需要循环读取报文,知道读完为止。
              • 带长度报文头循环读写:这种情况一般在长连接中,由于在长连接中没有条件能够判断循环读写什么时候结束。必须要加长度报文头。

              读函数先是读取报文头的长度,再根据这个长度去读报文,实际情况中,报头码制格式还经常不

              一样,如果是非ASCII的报文头,还必须转换成ASCII常见的报文头编制有:

              • n个字节的ASCII码
              • n个字节的BCD码
              • n个字节的网络整型码

              以上是几种比较典型的读写报文方式,可以与通信方式模板一起 预先提供一些典型的API读写函

              数。

              当然在实际问题中,可能还必须编写与对方报文格式配套的读写API. 在实际情况中,往往需要把

              我们自己的系统与别人的系统进行连接,有了以上模板与API,可以说连接任何方式的通信程序都

              不存在问题。

              --------------------------------------

              讲解三:从负载均衡视角看待长连接 & 短连接差异

              一、长连接、短连接遇负载均衡,差异在哪?

              负载均衡是现代网络架构中不可或缺的一部分,它通过合理分配请求流量,确保服务器资源的高

              效利用和系统的稳定性,在负载均衡的实现过程中,长连接和短连接是两种常见的连接方式,它

              们各有优缺点和适用场景,本文将逐一介绍。

              为了更清晰地展示长连接与短连接在负载均衡中的异同,下面通过表格进行对比说明:

              特性

              长连接

              短连接

              连接管理

              保持连接开放,重复使用

              每次请求建立新连接,完成后立即关闭

              性能开销

              连接建立开销小,数据传输效率高

              连接建立和拆除频繁,开销大

              适用场景

              适用于请求频繁、数据交互多的场景,如API服务、数据库连接

              适用于并发量大、单个客户端操作不频繁的场景,如Web浏览

              负载均衡策略

              需考虑连接粒度的负载均衡,如最小连接数、最快响应速度等

              主要依赖请求粒度的负载均衡,如轮询、加权轮询等

              会话保持

              天然支持会话保持,同一客户端的多个请求通常会被路由到同一服务器

              需依赖会话保持机制(如Cookie、IP哈希)来确保请求路由到同一服务器

              资源消耗

              长时间占用服务器资源,可能导致资源紧张

              每次请求独立,资源消耗相对均衡

              容错性

              当服务器故障时,需重新选择服务器并建立新连接

              每次请求独立,故障恢复后自动重新分配请求

              扩展性

              水平扩展时需考虑连接迁移和重新分配

              水平扩展相对简单,新增服务器即可

              1. 负载均衡算法

              这个就是参考 W 哥 Nginx 专栏有详细的介绍。

              2. 长连接下的负载均衡实践

              1. 负载均衡算法选择:根据应用场景和服务器性能选择合适的负载均衡算法,对于性能差异较大的服务器集群,可以采用加权轮询算法;对于需要保持状态的应用,可以采用哈希算法或会话保持机制。
              2. 服务器性能监控与预警实时监测服务器的性能指标(如CPU使用率、内存占用率、响应时间等),及时发现潜在的问题并进行预警,这有助于及时调整负载均衡策略或进行故障恢复。
              3. 长连接管理:在长连接下,需要特别注意连接的管理和优化,设置合理的超时时间和保活机制以维持连接的活跃状态;定期检查并清理无效或过期的连接以释放资源。
              4. 故障恢复与重连机制:当服务器发生故障时,需要快速将请求重新分配到其他健康的服务器上,对于已经建立的长连接也需要及时断开并重新建立新的连接以确保服务的连续性。
              5. 水平扩展与缩容:根据业务需求和负载情况动态调整服务器集群的规模,在水平扩展时需要考虑连接的迁移和重新分配问题;在缩容时则需要确保不影响正在进行的业务请求。

              3. 知识小结

              长连接和短连接在负载均衡中各有其优势和劣势,具体选择哪种方式取决于实际应用场景和需

              求,在实际应用中,我们需要根据具体情况进行权衡和选择,并结合合适的负载均衡算法来实现

              高效、稳定的系统架构,随着技术的不断发展和完善,长连接和短连接下的负载均衡技术也将不

              断进步和创新以满足更高的性能和可靠性要求。

              --------------------------------------

              讲解四:一堆实际应用场景题

              一、物联网上如何对长连接与短连接之间做出抉择?

              在物联网应用场景中,连接是不可或缺的基础设施。

              而连接方式的选择也直接影响着物联网系统的可靠性、性能和安全等方面。

              其中,最常见的两种连接方式是长连接和短连接,也就是上述一直反复强调的连接方式。

              经过多个文献分析,得出以下结论便于我们推论及理解

              1. 根据实际业务场景需求来选择:需要实时获取设备数据或进行实时通信时,长连接是更好的选择。而对电力消耗要求较高、发送数据量小的场景更适合使用短连接。
              2. 根据设备功率和网络质量选择:功率弱的设备使用长连接会额外消耗电力,不利于节能;而网络不稳定时,长连接会增加网络闪断的可能性。
              3. 根据数据安全性选择:对于对数据安全性有高要求的场景,长连接更为安全,因为其较短的连接建立频次减少了数据泄露的可能性。

              二、短视频直播系统如何对长连接与短连接之间做出抉择?

              对于短视频直播系统中会频繁发起请求的场景中,使用长连接更有利于节约资源。

              无论是短连接还是长连接都有其适用的业务场景,所以在开发短视频直播系统时,需要结合实际

              的开发情况有针对性的抉择,以保证系统性能和用户的使用体验。开发短视频直播系统并不是一

              件容易的事,当我们面对各种抉择场景时,要结合实际开发情况、站在用户的角度上考虑、分

              析。

              三、手游开发网络通信中如何对长连接与短连接之间做出抉择?

              在手游开发中,使用长连接还是短链接来实现网络通信主要取决于应用的特性和需求。

              长连接(TCP连接)在手游开发中更常见,因为它们提供了更稳定的通信环境,适合多人在线游

              戏或实时交互的应用。

              使用长连接,客户端和服务器之间的连接可以保持开启,并在需要时进行通信,而无需每次都建

              立新的连接。

              这使得游戏或应用能够处理多个并发连接,并提供了更好的性能和稳定性。

              短连接(HTTP请求)通常用于请求特定的数据或信息,例如加载游戏地图或角色图像。

              短连接具有更高的性能,因为它们不需要建立和维护持续的连接。

              客户端发送请求并得到响应后,连接即可关闭。

              这种模式适用于少量请求的情况,特别是在离线或短暂联网时获取数据。

              总的来说,选择长连接还是短连接取决于你的应用的具体需求和环境。

              如果你的应用需要处理大量的并发连接并实现实时交互,那么长连接可能更适合你。

              然而,如果你的应用只需要定期获取某些数据或信息,那么短连接可能是一个更好的选择。

              从通信方式的角度来说,这种单进程CS架构一般都是基于传统RPG游戏做了单服联网的迭代,

              所以在通信协议上,还是单进程架构。

              这些游戏很多是从页游过来的,协议上多采用HTTP协议,或者为了实现长连接,也会使用

              WebSocket协议、TCP协议,使用KCP协议的单进程CS架构游戏较少。因为KCP协议更适用于

              实时竞技游戏。

              四、IM系统聊天通信如何对长连接与短连接之间做出抉择?

              IM系统在聊天通信中应选择长连接而非短连接,主要原因如下‌:

              1. 保持连接‌:长连接通过保持客户端和服务器之间的连接,使得通信更加高效。在长连接模式下,客户端和服务器之间的会话保持打开状态,减少了频繁建立和断开连接的开销,从而提高了数据传输的效率‌12。
              2. 实时性‌:长连接能够确保消息的实时传输,避免了短连接因每次请求都需要重新建立连接而导致的延迟。长连接通过持续保持连接状态,确保消息能够及时送达,特别适合需要高实时性的IM系统‌34。
              3. 资源利用‌:长连接减少了信道和网络资源的浪费。由于连接保持打开状态,避免了短时间内重复连接的需求,从而节省了资源‌34。
              4. 心跳机制‌:为了维持长连接的活跃状态,客户端和服务端会定期交换心跳消息,这有助于检测连接的健康状况并防止连接因空闲而超时。心跳机制确保了连接的稳定性,减少了因网络波动导致的断开风险‌34。
              5. 重连机制‌:当长连接因网络波动或其他原因断开时,通常会有重连机制来尝试恢复连接,保证通信的连续性。这种机制使得IM系统在面对网络不稳定时能够快速恢复服务,提高了系统的鲁棒性‌45。

              具体实现长连接的步骤包括‌:

              1. 连接建立‌:客户端发起连接请求至服务端,通常包括TCP的三次握手过程,确保连接的可靠性‌5。
              2. 心跳维护‌:客户端和服务端定期交换心跳消息,以维持连接的活跃状态并检测连接的健康状况‌5。
              3. 数据传输‌:一旦长连接建立并维护成功,客户端和服务端可以通过这个持久的连接进行数据的双向传输‌5。
              4. 重连机制‌:在网络波动或连接断开时,通过重连机制恢复连接,确保通信的连续性‌5。

              五、AFSIM通信服务器后端对长连接与短连接之间做出抉择?仿真推演系统

              在AFSIM仿真推演系统中,通信服务器后端对于长连接与短连接的选择,同样需要考虑应用场景、系统性能、资源占

              用以及仿真推演的具体需求。

              1. 长连接在AFSIM仿真推演系统中的应用

              1. 实时性要求高‌:

              • 如果仿真推演系统需要实现实时的数据传输和交互,如实时战场模拟、实时天气系统更新等,长连接是一个更好的选择。长连接能够保持客户端和服务器之间的持续通信,减少连接建立和断开的开销,从而提高数据传输的实时性。

              2. 频繁数据交换‌:

                • 在仿真推演过程中,如果各个仿真对象(如车辆、飞机、传感器等)之间需要频繁交换数据以模拟实际环境中的交互,长连接可以显著降低延迟,提高仿真推演的效率。

                3. ‌资源占用与优化‌:

                  • 虽然长连接会占用一定的服务器资源,但通过合理的连接管理和优化策略(如连接池技术、负载均衡等),可以有效地控制资源占用,确保仿真推演系统的稳定运行。

                  2. 短连接在AFSIM仿真推演系统中的应用

                  1. ‌临时性数据传输‌:

                    • 如果仿真推演系统只需要进行偶尔的数据传输或查询操作,如初始化参数设置、状态查询等,短连接可能是一个更合适的选择。在这种情况下,短连接可以简化连接管理,减少不必要的资源占用。

                    2. ‌低并发场景‌:

                      • 如果仿真推演系统的并发请求量不高,且每次请求的数据量较小,短连接可以避免过多的连接占用,提高系统的响应速度。

                      3. 选择建议

                      1. ‌综合考虑仿真推演需求‌:

                        • 在选择长连接或短连接时,应综合考虑仿真推演系统的具体需求。如果系统需要实现高实时性、频繁数据交换和复杂的仿真推演场景,长连接是更好的选择。如果系统主要进行偶尔的数据传输和查询操作,且并发请求量不高,短连接可能更合适。

                        2. ‌评估系统性能与资源占用‌:

                          • 在选择连接方式之前,应对仿真推演系统的性能进行评估,了解系统的处理能力、网络带宽等资源限制。同时,还需要考虑连接方式对资源占用的影响,确保所选连接方式不会成为系统性能瓶颈。

                          3. ‌考虑未来扩展性‌:

                            • 在选择连接方式时,还应考虑系统的未来扩展性。如果预计未来仿真推演系统的规模和复杂度会增加,长连接可能更能满足未来扩展的需求。

                            4. ‌实施与测试‌:

                              • 在确定连接方式后,应进行充分的实施和测试工作,确保连接方式的稳定性和可靠性。通过模拟实际仿真推演场景,验证所选连接方式是否能够满足系统的性能需求。

                              综上所述,AFSIM仿真推演系统中通信服务器后端对于长连接与短连接的选择,应综合考虑仿真

                              推演的具体需求、系统性能、资源占用以及未来扩展性等因素。通过合理的选择和优化策略,可

                              以提高仿真推演系统的实时性、效率和稳定性。

                              --------------------------------------

                              参考文献

                              • 长连接短连接的区别以及使用场景
                              • 计算机网络-长连接和短连接
                              • 长连接和短连接的区别、长连接的实现
                              • 网络连接中的长连接和短连接是什么意思?
                              • 短链接 vs 长连接:你真的知道它们的区别吗? 
                              • 负载均衡中,长连接与短连接各有何优劣?
                              • 长连接和短连接
                              • 物联网连接选择:长连接还是短连接? 
                              • 短视频直播系统,长连接和短连接该如何抉择?
                              • 手游开发中网络通信使用长连接还是短连接比较好?
                              • 聊聊长连接和短连接
                              • 长连接和短连接的讲述
                              • 如何查询长连接和短连接? 

                              相关文章:

                              09网络深入连贯篇(D1_彻底理解长连接 短连接(一))

                              目录 讲解一:长连接 & 短连接 一、初次见证长连接和短连接 1. 长连接 2. 短连接 二、如何区分当前连接是长连接还是短连接? 三、如何查询长连接和短连接? 四、那么长连接与短连接操作过程又是如何呢? 五、各自优缺点 …...

                              ElasticSearch学习笔记-解析JSON格式的内容

                              如果需要屏蔽其他项目对Elasticsearch的直接访问操作&#xff0c;统一由一个入口访问操作Elasticsearch&#xff0c;可以考虑直接传入JSON格式语句解析执行。 相关依赖包 <properties><elasticsearch.version>7.9.3</elasticsearch.version><elasticsea…...

                              网络计算机的五个组成部分

                              单个计算机是无法进行通信的。所以需要借助网络。 下面介绍一些在网络里常见的设备。 一、服务器 服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备 它在网络中为其他客户机&#xff08;如个人计算机、智能手机、ATM机等终端设备&#xff09;提供计算或者应用…...

                              责任链模式(Chain Responsibility)

                              一、定义&#xff1a;属于行为型设计模式&#xff0c;包含传递的数据、创建处理的抽象和实现、创建链条、将数据传递给顶端节点&#xff1b; 二、UML图 三、实现 1、需要传递处理的数据类 import java.util.Date;/*** 需要处理的数据信息*/ public class RequestData {priva…...

                              在游戏本(6G显存)上本地部署Deepseek,运行一个14B大语言模型,并使用API访问

                              在游戏本6G显存上本地部署Deepseek&#xff0c;运行一个14B大语言模型&#xff0c;并使用API访问 环境说明环境准备下载lmstudio运行lmstudio 下载模型从huggingface.co下载模型 配置模型加载模型测试模型API启动API服务代码测试 deepseek在大语言模型上的进步确实不错&#xf…...

                              web-JSON Web Token-CTFHub

                              前言 在众多的CTF平台当中&#xff0c;作者认为CTFHub对于初学者来说&#xff0c;是入门平台的不二之选。CTFHub通过自己独特的技能树模块&#xff0c;可以帮助初学者来快速入门。具体请看官方介绍&#xff1a;CTFHub。 作者更新了CTFHub系列&#xff0c;希望小伙伴们多多支持…...

                              CTF-web: fs.readFileSync特殊利用

                              URL类 URL 类是 JavaScript 的内置类&#xff08;或对象&#xff09;&#xff0c;它用于处理和解析 URL&#xff08;统一资源定位符&#xff09;。URL 是 Web API 的一部分&#xff0c;广泛应用于浏览器环境和 Node.js 中。 特性 构造函数: URL 类的构造函数可以接受一个 URL…...

                              深入探索 C++17 特征变量模板 (xxx_v)

                              文章目录 一、C++类型特征的前世今生二、C++17特征变量模板闪亮登场三、常见特征变量模板的实际应用(一)基本类型判断(二)指针与引用判断四、在模板元编程中的关键作用五、总结与展望在C++的持续演进中,C++17带来了许多令人眼前一亮的特性,其中特征变量模板(xxx_v)以其…...

                              时间序列分析(一)——基础概念篇

                              一、时间序列的相关概念 定义&#xff1a;时间序列是按时间顺序排列的一系列观测值&#xff0c;通常以固定间隔&#xff08;如秒、天、年&#xff09;记录。而时间序列分析是一种研究按时间顺序排列的数据点的统计方法&#xff0c;发现趋势、季节性波动、周期性和异常等模式&a…...

                              贪心与单调栈的艺术:从三道 LeetCode 题看最小字典序问题(316/402/1081)

                              前言 欢迎来到我的算法探索博客&#xff0c;在这里&#xff0c;我将通过解析精选的LeetCode题目&#xff0c;与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验&#xff0c;旨在帮助每一位读者提升编程技能&#xff0c;领略算法之美。 &#x1f449;更多高频有趣Lee…...

                              rabbitMQ消息转换器

                              消息转换器 Spring的消息发送代码接收的消息体是一个Object&#xff1a; 而在数据传输时&#xff0c;它会把你发送的消息序列化为字节发送给MQ&#xff0c;接收消息的时候&#xff0c;还会把字节反序列化为Java对象。 只不过&#xff0c;默认情况下Spring采用的序列化方式是J…...

                              力扣-字符串-541 反转字符串Ⅱ

                              思路 和《反转字符串》的代码类似&#xff0c;只是每次处理2k个 代码 class Solution { public:string reverseStr(string s, int k) {int length s.length();int reverse 0;while(reverse < length){int left, right;if(reverse k < length){left reverse, right…...

                              CSS(三)less一篇搞定

                              目录 一、less 1.1什么是less 1.2Less编译 1.3变量 1.4混合 1.5嵌套 1.6运算 1.7函数 1.8作用域 1.9注释与导入 一、less 1.1什么是less 我们写了这么久的CSS,里面有很多重复代码&#xff0c;包括通配颜色值、容器大小。那我们能否通过js声明变量来解决这些问题&…...

                              GT 接口时钟

                              每个 GT 接口需要几个时钟&#xff0c;包括一些共享时钟&#xff0c;这些时钟在位于一个或多个 GT quad 中的绑定 GT*_CHANNEL 单元之间共享。 UltraScale 器件提供高达 128 个 GT*_CHANNEL site 位置&#xff0c;这可能导致在设计中使用几百个时钟。大多数 GT 时钟具…...

                              算法日记13:SC41树状数组(区间修改)

                              一、题目&#xff1a; 二、题解&#xff1a; 在单点修改中&#xff0c;我们用t[i]来维护原数组2.1:在区间修改中&#xff0c;我们将维护原数组的差分数组 接下来&#xff0c;让我们来回顾一些差分的性质 此时&#xff0c;假设我们需要求 a 1 a 2 a 3 a 4 a1a2a3a4 a1a2a3a…...

                              【STM32】串口原理

                              单片机有自己的RX&#xff08;接收端&#xff09;&#xff0c;TX&#xff08;发送端&#xff09;&#xff0c;有的需要再共同接一个底线&#xff0c;为了保证有相同的参考电势&#xff0c;数据如果是高电平的话&#xff0c;发送过去也是高电平 1.轮询方式 CPU需要时刻注意发送…...

                              libdrm移植到arm设备

                              一、环境资源要求 下载libdrm Index of /libdrm 这边使用的是2.4.114版本&#xff0c;版本太高对meson版本要求也很高&#xff0c;为了省事用apt安装meson就不用太高版本了&#xff0c;1.x版本虽然使用makefile编译方便但是太老&#xff0c;对应用支持不太好。 https://dri…...

                              【PyTorch】解决Boolean value of Tensor with more than one value is ambiguous报错

                              理解并避免 PyTorch 中的 “Boolean value of Tensor with more than one value is ambiguous” 错误 在深度学习和数据科学领域&#xff0c;PyTorch 是一个强大的工具&#xff0c;它允许我们以直观和灵活的方式处理张量&#xff08;Tensor&#xff09;。然而&#xff0c;即使…...

                              CS 与 BS 架构的差异

                              在数字化的今天&#xff0c;选择软件架构模式对系统的性能、维护、安全和成本都有很大影响。BS架构和CS架构是最常见的两种模式&#xff0c;了解它们的区别和特点对开发人员和企业决策者都很重要。 CS架构最早出现&#xff0c;当时用户直接从主机获取数据。随着客户端和服务端…...

                              一款由 .NET 官方团队开源的电子商务系统 - eShop

                              项目介绍 eShop是一款由.NET官方开源的&#xff0c;基于.NET Aspire构建的用于参考学习的服务架构电子商务系统&#xff0c;旨在展示如何利用.NET框架及其相关技术栈构建一个现代化的电子商务网站。该项目采用服务架构&#xff0c;将应用程序分解为多个独立的服务&#xff0c;…...

                              项目顺利交付,几个关键阶段

                              年前离放假还有10天的时候&#xff0c;来了一个应急项目&#xff0c; 需要在放假前一天完成一个演示版本的项目&#xff0c;过年期间给甲方领导看。 本想的最后几天摸摸鱼&#xff0c;这么一来&#xff0c;非但摸鱼不了&#xff0c;还得加班。 还在虽然累&#xff0c;但也是…...

                              springboot简单应用

                              快速开发Springboot项目实现简单的增删改查&#xff0c;前期需要准备&#xff1a;idea与postman安装 Maven&#xff0c;MySQL&#xff08;8&#xff09;&#xff0c;JDK(21) 目录 前言 springboot 使用3.0版本&#xff0c;JDK使用21,MySQL使用8版本 开发环境IDEA使用2024版本 …...

                              lock 和 synchronized 区别

                              一、功能 Lock和Synchronized都是Java中用来解决线程安全问题的工具&#xff0c;它们能够确保多个线程在访问共享资源时的正确性和一致性。 二、特性 基本定义与实现&#xff1a; Synchronized是Java中的一个同步关键字&#xff0c;由JVM实现。Lock是Java中的一个接口&#x…...

                              inquirer介绍及配合lerna在Vue中使用示例

                              目录 安装基本用法使用多个提示框动态选择&#xff08;动态选项&#xff09;表单式输入配合lerna在Vue中使用示例 Inquirer 是一个用于创建交互式命令行工具的 Node.js 库&#xff0c;常用于收集用户输入。它提供了多种类型的提示框&#xff0c;可以用于创建交互式应用程序&…...

                              System类

                              作用&#xff1a;有标准输入、标准输出和错误输出流&#xff0c;对外部定义的属性和环境变量的访问&#xff0c;加载文件和库的方法&#xff0c;还有快速复制数组的一部分的实用方法 java.lang.Object继承者 java.lang.System字段摘要 主要常用的是方法 构造方法摘要 Syste…...

                              MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR)

                              MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR) MySQL官方文档&#xff1a; https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html 一. 对比&#xff1a; 在 MySQL 中&#xff0c;处理时间相关的数据类型主要有以下几种&#xff1a;DATE、TIME、…...

                              为什么会有函数调用参数带标签的写法?Swift函数调用的参数传递需要加前缀是否是冗余?函数调用?函数参数?

                              为什么会有函数调用参数带标签的写法? ObjC函数参数形式与众不同&#xff0c;实参前会加前缀&#xff0c;尤其参数很多的情况&#xff0c;可读性很强。例如&#xff1a; [person setAge: 29 setSex:1 setClass: 35]; 这种参数前面加前缀描述也被叫标签(Label). 注意&#xff0…...

                              Macos安装APOC拓展库

                              文章目录 说明错误提示原因分析解决方法 说明 Macos安装APOC核心库 错误提示 There is no procedure with the name apoc.generate.ba registered for this database instance. Please ensure youve spelled the procedure name correctly and that the procedure is prope…...

                              用NeuralProphet预测股价:AI金融新利器(附源码)

                              作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a;我用NeuralProphet模型预测了股票价格&#xff0c;发现其通过结合时间序列分析和神经网络算法&#xff0c;确实能提供比传统Last Value方法更精准的预测。经过一系列超参数调优…...

                              go-zero学习笔记(三)

                              利用goctl生成rpc服务 编写proto文件 // 声明 proto 使用的语法版本 syntax "proto3";// proto 包名 package demoRpc;// golang 包名(可选) option go_package "./demo";// 如需为 .proto 文件添加注释&#xff0c;请使用 C/C 样式的 // 和 /* ... */…...

                              【ABB阀门定位器EDP300如何进行自整定】

                              ABB阀门定位器EDP300如何进行自整定 自整定前准备 检查安装与连接 确保阀门和定位器安装正确&#xff0c;机械连接牢固&#xff0c;无卡阻或松动。 确认气源压力符合要求&#xff08;通常为1.4~7 bar&#xff09;&#xff0c;气路无泄漏。 确保4~20mA输入信号稳定且接线正确。…...

                              Day48_20250130【回校继续打卡】_单调栈part1_739.每日温度|496.下一个更大元素I|503.下一个更大元素II

                              Day48_20250130_单调栈part1_739.每日温度|496.下一个更大元素I|503.下一个更大元素II 20250130补完 739.每日温度 题目 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0…...

                              使用 Let‘s Encrypt 和 OpenResty 实现域名转发与 SSL 配置

                              在搭建网站或服务时&#xff0c;确保域名的安全性和正确的流量转发是非常重要的。本文将介绍如何使用 Let’s Encrypt 获取免费的 SSL 证书&#xff0c;并将其配置到 OpenResty 中&#xff0c;同时实现特定的域名转发规则。这不仅可以提升网站的安全性&#xff0c;还能优化流量…...

                              Spring Boot启动内嵌tocmat原理

                              要研究Spring Boot启动内嵌tomcat的原理&#xff0c;就需要先了解一下Spring Boot自动配置的过程&#xff0c;首先简要的梳理一下springboot自动配置的步骤。 一、SpringBoot自动配置 当SpringBoot应用启动时&#xff0c;EnableAutoConfiguration注解被激活&#xff0c;该注解…...

                              【系统架构设计师】分布式数据库透明性

                              目录 1. 说明2. 分片透明3. 复制透明4. 位置透明5. 逻辑透明&#xff08;局部数据模型透明&#xff09;6.例题6.1 例题1 1. 说明 1.在分布式数据库系统中&#xff0c;分片透明、复制透明、位置透明和逻辑透明是几个重要的基本概念。2.分片透明、复制透明、位置透明和逻辑透明是…...

                              MySQL三大日志——binlog、redoLog、undoLog详解

                              日志是mysql数据库的重要组成部分&#xff0c;记录着数据库运行期间各种状态信息&#xff0c;能帮助我们进行很多容错及分析工作&#xff0c;其中有三大日志与我们这些开发者息息相关&#xff0c;本文将介绍binlog、redoLog、undoLog三种日志&#xff1a; 1. redoLog 1.1 为什么…...

                              ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景

                              1. 对象属性简写 1.1 基本语法 // 传统写法 const name John; const age 25; const user {name: name,age: age };// ES6 简写语法 const user {name,age };1.2 实际应用场景 // 1. 函数返回对象 function createUser(name, age, email) {return {name,age,email}; }// …...

                              Markdown 博客写作图片自动上传到 CSDN 与博客园

                              背景 目前大部分的博客都是基于 Typora 软件编写&#xff0c;其中的图片都是本地相对路径&#xff0c;以前都手动逐个复制图片上传到 CSDN&#xff0c;但这个过程很繁琐&#xff0c;故想着使用自动上传图片。 目前有以下特点可利用&#xff1a; dotnet-cnblog 工具可自动把本…...

                              大模型—Dify本地化部署实战

                              Dify本地化部署实战 系统要求 安装 Dify 之前, 请确保你的机器已满足最低安装要求: CPU >= 2 CoreRAM >= 4 GiB本地部署 开始前先简单介绍下部署Dify需要用到的组件,稍微有点多,但放心,有Docker你怕啥? 关系数据库:postgres缓存:Redis向量数据库:支持weaviate…...

                              Java抽象类和接口的区别

                              一、抽象类 当一个类中没有包含足够的信息以描绘一个具体的对象时&#xff0c;这样的类就是抽象类&#xff1b;“抽象类”是用关键字 abstract 修饰的&#xff0c;抽象类中有一种特殊方法&#xff0c;即用abstract 关键字来修饰的方法&#xff0c;这些方法被称为“抽象方法” …...

                              基于YUV的色相调节(二)

                              文章目录 量纲范围归一化归一化因子&#xff1a; U m , V m U_m, V_m Um​,Vm​归一化因子&#xff1a; U m a x , V m a x U_{max}, V_{max} Umax​,Vmax​ 接上一篇&#xff1a;基于YUV的色相调节&#xff08;一&#xff09; 量纲范围归一化 正常情况下UV的量纲范围不一样&…...

                              【QT笔记】使用QScrollArea实现多行文本样式显示

                              目录 一、QScrollArea 的基本概念 二、demo代码 三、实现效果 1、页面空间足够&#xff0c;无滚动条时显示效果 2、有滚动条时显示效果 一、QScrollArea 的基本概念 QScrollArea 是 Qt 框架中用于提供一个滚动条区域&#xff0c;允许用户滚动查看比当前可视区域更大的内容…...

                              【自然语言处理】TextRank 算法提取关键词(Python实现)

                              文章目录 前言PageRank 实现TextRank 简单版源码实现jieba工具包实现TextRank 前言 TextRank 算法是一种基于图的排序算法&#xff0c;主要用于文本处理中的关键词提取和文本摘要。它基于图中节点之间的关系来评估节点的重要性&#xff0c;类似于 Google 的 PageRank 算法。Tex…...

                              八大排序算法细讲

                              目录 排序 概念 运用 常见排序算法 插入排序 直接插入排序 思想&#xff1a; 步骤&#xff08;排升序&#xff09;: 代码部分&#xff1a; 时间复杂度&#xff1a; 希尔排序 思路 步骤 gap的取法 代码部分&#xff1a; 时间复杂度&#xff1a; 选择排序 直接选…...

                              机器学习9-卷积和卷积核2

                              机器学习9-卷积和卷积核2 卷积与边缘提取边缘的种类边缘检测图像求导解析示例 图像求导公式&#xff1a;解析总结 图像梯度噪声的影响 边缘检测目标非极大值抑制总结 卷积与边缘提取 边缘&#xff1a;图像中亮度明显而急剧变化的点 为什么要研究边缘&#xff1f; 编码图像中…...

                              微服务知识——微服务拆分规范

                              文章目录 一、微服务拆分规范1、高内聚、低耦合2、服务拆分正交性原则3、服务拆分层级最多三层4、服务粒度适中、演进式拆分5、避免环形依赖、双向依赖6、通用化接口设计&#xff0c;减少定制化设计7、接口设计需要严格保证兼容性8、将串行调用改为并行调用&#xff0c;或者异步…...

                              【回溯+剪枝】单词搜索,你能用递归解决吗?

                              文章目录 79. 单词搜索解题思路&#xff1a;回溯&#xff08;深搜&#xff09; 剪枝 79. 单词搜索 79. 单词搜索 ​ 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …...

                              deepseek接入pycharm 进行AI编程

                              要将DeepSeek接入PyCharm进行AI编程,可以按照以下步骤操作: ### 1. 获取DeepSeek API访问权限 DeepSeek通常以API的形式对外提供服务,你需要在其官方网站注册账号,申请API访问权限。在申请通过后,会获得API密钥(API Key),这是后续调用API的关键凭证。 ### 2. 安装必要…...

                              M系列/Mac安装配置Node.js全栈开发环境(nvm+npm+yarn)

                              一、安装 nvm&#xff08;Node Version Manager&#xff09; 打开终端&#xff0c;使用 curl 在 M 系列 Mac 上安装 nvm&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash对于非 M 系列的 Intel Mac&#xff0c;上述命令同样适…...

                              常见Linux命令的复习

                              常见命令 ls 列出工作目录 ls -l&#xff1a;以长格式显示目录下的文件和子目录信息。ls -a&#xff1a;显示所有文件和子目录&#xff0c;包括隐藏文件 ll 列出该目录下的详细信息 看到该目录下的所有目录和文件的详细信息 cd 切换当前工作目录里 cd /path/to/directory&…...