<
WebSocket
>
上一篇

jdk1.8 新特性
下一篇

java容器、集合

WebSocket

websocket定义:是h5提供的在单个tcp链接上进行的全双工通讯的协议(WebSocket 协议本质上是一个基于 TCP 的协议)。

允许服务端主动向客户端推送数据。更好的节省服务器资源和宽带,实时信息传递。

以往若想服务器向客户端推送数据,需要ajax轮询,前端定时向服务器发送http请求,然后由服务器给客户端最新数据。

但是由于http请求头可能过长,而真正有用的数据可能是很小的一部分,那么不断发送请求向服务器,可能会浪费很多的宽带资源。


浏览器通过js向服务器发送请求,建立 WebSocket 连接后,客户端与服务器就可以通过tcp建立连接交换数据。

客户端通过send方法想服务器发送参数,通过onmessage方法接收服务器数据。

建立websocket对象的方法

var Socket = new WebSocket(url, [protocol] );
WebSocet的事件:

,如图所示:

image

websocket方法:

Socket.send() 使用连接发送数据

Socket.close() 关闭连接

jsp页面示例:

    // 初始化一个 WebSocket 对象
    var ws = new WebSocket("ws://localhost:9998/echo");

    // 建立 web socket 连接成功触发事件
    ws.onopen = function () {
      // 使用 send() 方法发送数据
      ws.send("发送数据");
      alert("数据发送中...");
    };

    // 接收服务端数据时触发事件
    ws.onmessage = function (evt) {
      var received_msg = evt.data;
      alert("数据已接收...");
    };

    // 断开 web socket 连接成功触发事件
    ws.onclose = function () {
      alert("连接已关闭...");
    };

客户端能判断出服务器的socket连接是否关闭,

服务器不能判断出客户端是否关闭,

必须先断服务端,再断客户端。否则客户端出现TIME_WAIT状态,占用系统资源。

问:服务器怎么判断客户端的websocket连接断开?

做一个心跳包,多任务跑,如果心跳断开了 就失联了。。。

注意:客户端不能跳转到其他页面,若跳转页面,websocket就断开了,服务器发送的信息客户端就收不到了

Top
Foot