允许服务端主动向客户端推送数据。更好的节省服务器资源和宽带,实时信息传递。
以往若想服务器向客户端推送数据,需要ajax轮询,前端定时向服务器发送http请求,然后由服务器给客户端最新数据。
但是由于http请求头可能过长,而真正有用的数据可能是很小的一部分,那么不断发送请求向服务器,可能会浪费很多的宽带资源。
浏览器通过js向服务器发送请求,建立 WebSocket 连接后,客户端与服务器就可以通过tcp建立连接交换数据。
客户端通过send方法想服务器发送参数,通过onmessage方法接收服务器数据。
建立websocket对象的方法
var Socket = new WebSocket(url, [protocol] );
,如图所示:
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就断开了,服务器发送的信息客户端就收不到了