当前位置: 首页 > 工具软件 > SockJS > 使用案例 >

SockJS

司空默
2023-12-01

实时通信

  传统的Http协议是无法实现实时通信(Instant Message)的。

实现实时通信,我们通常有三种方法:

一、Ajax轮询

  ajax轮询的原理非常简单,让浏览器每隔几秒就向服务器发送一个请求,询问服务器是否有新的信息。

二、HTTP长轮询

  长轮询的机制和ajax轮询差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起请求后,如果没有消息,就一直不返回response给客户端。直到有新的消息才返回,返回完之后,客户端再次建立连接,周而复始。

三、WebSocket

  WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。在WebSocket API中,浏览器和服务器只需要做一个握手的动作(握手过程需要借助HTTP来实现),然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送,不需要繁琐的询问和等待。

  从上面的介绍很容易看出来,Ajax轮询和长轮询都是非常耗费资源的,Ajax轮询需要服务器有很快的处理速度和资源,HTTP长轮询需要有很高的并发,也就是同时接待客户的能力。而WebSocket,只需要经过一次HTTP请求,就可以与服务端进行源源不断的消息收发了。

SockJS

  WebSocket虽好,但一些浏览器中缺少对WebSocket的支持,因此,回退选项是必要的。

  SockJS和socket.io都是对WebSocket的模拟。

  这次介绍的是SockJS。

  SockJS是一个浏览器的JavaScript库,它提供了一个类似于网络的对象,SockJS提供了一个连贯的,跨浏览器的JavaScriptAPI,它在浏览器和Web服务器之间创建了一个低延迟、全双工、跨域通信通道。

  SockJS的一大好处在于提供了浏览器兼容性。即优先使用原生WebSocket,如果浏览器不支持WebSocket,会自动降为轮询的方式。

sockjs-client
  sockjs-client是从SockJS中分离出来的用于客户端使用的通信模块。

stomjs
  STOMP(Simple Text-Orientated Messaging Protocol) 面向消息的简单文本协议。

  WebSocket是一个消息架构,不强制使用任何特定的消息协议,它依赖于应用层解释消息的含义。

  与HTTP不同,WebSocket是处在TCP上非常薄的一层,会将字节流转化为文本/二进制消息,因此,对于实际应用来说,WebSocket的通信形式层级过低,因此,可以在WebSocket之上使用STOMP协议,来为浏览器和server间的通信增加适当的消息语义。

STOMP与WebSocket 的关系
  HTTP协议解决了web浏览器发起请求以及web服务器响应请求的细节,假设HTTP协议不存在,只能使用TCP套接字来编写web应用,你可能认为这是一件疯狂的事情。

  直接使用WebSocket(SockJS)就很类似于使用TCP套接字来编写web应用,因为没有高层协议,就需要我们定义应用间发送消息的语义,还需要确保连接的两端都能遵循这些语义。

  同HTTP在TCP套接字上添加请求-响应模型层一样,STOMP在WebSocket之上提供了一个基于帧的线路格式层,用来定义消息语义。

四、应用:网页版多人聊天室

https://blog.csdn.net/u014644574/article/details/97005036

 类似资料: