美文网首页
三种实现实时通讯的方案

三种实现实时通讯的方案

作者: 倚仗听江 | 来源:发表于2021-01-05 16:42 被阅读0次

    1. Ajax轮询

    使用ajax异步的每隔一段时间向后端发送一次请求,询问服务器有没有新的消息或者新的状态更新,如果有则返回给前端。因为这种方式其实是一种死循环,所以需要服务器有很快的处理速度和资源
    大概就是下面这样的情况
    客户端:有新消息吗?(Request)
    服务端:没有(Response)
    客户端:有新消息吗?(Request)
    服务端:没有(Response)
    客户端:有新消息吗?(Request)
    服务端:没有!你好烦!(Response)
    客户端:有新消息吗?(Request)
    服务端:你有病吧(Response)
    客户端:有新消息吗?(Request)
    服务端:有了,拿走。。。(Response)
    客户端:有新消息吗?(Request)
    服务端:没有。。。(Response)

    2. Long pull

    原理和Ajax轮询差不多,只不过他使用的是一种阻塞的模式。当客户端发起请求后,如果服务端没有响应,那么就会一直阻塞着。只有在服务端返回后,才会再次建立请求,周而复始。因为使用的是阻塞的模式,所以需要有很高的并发
    大概就是下面这样的情况
    客户端:有新消息吗?没有你也不准挂,等到有新消息了立马告诉我(Request)
    服务端:好吧,那就一直连接着。。。终于有新消息了,来,给你(Response)
    客户端:有新消息吗?没有你也不准挂,等到有新消息了立马告诉我(Request)
    服务端:好吧,那就一直连接着。。。终于有新消息了,来,给你(Response)
    ......
    以上的两种方式都是在不停的建立HTTP连接,等待服务器处理。这是一种被动的响应,是比较消耗资源的。(这其实就是HTTP的一个特点:被动性,服务端不能主动联系客户端,只能有客户端发起。)

    3. WebSocket

    WebSocket其实就是基于HTTP的一种协议,或者说就是使用HTTP协议来实现一部分的握手。客户端发起请求到服务端,找到服务端的服务助理,服务助理会和客户端保持连接,并且可以主动的推送消息给客户端。Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中。

    WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话(不同于HTTP的被动性)。

    大概是以下这样的场景:
    客户端:我要建立Websocket协议。
    服务端:好的,建立Websocket协议。
    客户端:麻烦有新消息的时候告诉我哦_
    服务端:好的。
    服务端:有新消息了,来,给你。

    WebSocket协议具有以下特点:

    • 建立在 TCP 协议之上,服务器端的实现比较容易。
    • 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
    • 数据格式比较轻量,性能开销小,通信高效。
    • 可以发送文本,也可以发送二进制数据。
    • 没有同源限制,客户端可以与任意服务器通信。
    • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

    相关文章

      网友评论

          本文标题:三种实现实时通讯的方案

          本文链接:https://www.haomeiwen.com/subject/hpfwoktx.html