zoukankan      html  css  js  c++  java
  • Websocket

    Websocket

    Websocket实现长连接的原理

    首先Websocket是一个应用层的一种在客户端与服务器之间保持TCP长连接的网络协议,可以建立全双工通信,这样客户端与服务器就可以随时进行信息交换。(虽然任何客户端或服务器上的应用都可以使用WebSocket,但原则上还是指浏览器与服务器之间使用。)通过WebSocket,服务器可以直接向客户端发送数据,而无须客户端周期性的请求服务器,以动态更新数据内容。

    在这个过程中,应用层就是定义了如何解释一段数据流,传输层只保证数据能够发送出去。Websocket只是html5规范中目的为了解决HTTP单向通信的缺点,因为HTTP只规定了单向通信,虽然HTTP当中也有长连接的概念,但是这里的长连接指的是TCP连接不会立即释放;对应的Websocket则是指TCP连接不会释放,然后基于TCP连接,服务器端可以把消息通过WS推送给客户端,客户端也可以推送消息给服务器端的这个双向过程。

    另外,TCP本身是定义了一种把数据原模原样发送出去,只要双方不关闭连接就不会断开连接的协议。

    为什么不选择Socket建立长连接呢

    使用Socket也可以建立长连接,只是跟直接使用Websocket相比,输入输出流我们需要自己去使用不同的API去处理。另外,Websocket是HTML5的规范,本身解决的就是浏览器中JavaScript没有办法创建与系统有关的对象比如Socket,网页开发没有办法独立操作Socket,所以才定义了新的协议让浏览器去实现,这样的一种补救方式。如果客户端要使用这个协议进行通信,也是基于Socket进行封装即可。

    那为什么使用HTTP设置请求头参数让TCP连接保持更长时间呢?协议是双方通信遵循的标准,即使客户端设置的时间再长,但是服务端规定的时间假设最多只有5秒,这也没有办法完成工作;并且如果用HTTP可以设置成保持TCP无限长的时间,服务端的负载将变得很大,可能无法正常工作了。

    数据包格式

    抓包过程与报文格式分析

    使用框架建立长连接

  • 相关阅读:
    IDEA上传项目至git
    MyBatis 三种批量插入方式的对比 !
    华为 Java 编程军规 !
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    mysql数据库表的查询操作-总结
    idea返回git上历史版本
    JSONObject json对象-JSONArray json数组
    exception in thread "main" com.alibaba.fastjson.JSONException: exepct '[', but
    第三课
    第二课
  • 原文地址:https://www.cnblogs.com/chen-ying/p/12730752.html
Copyright © 2011-2022 走看看