绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
javascript实现web通讯的几种方式
2019-10-25 11:15:25

大家经常浏览一些网站时候会弹出在线聊天窗口,点击后可以和客服人员聊天,非常方便,之前也做过一款简单的在线聊天工具,下面就说说在线聊天通讯的主要几种技术手段。

1、Ajax

在html5之前,这个是很主流的web通讯方式,通过ajax不断请求服务器获取数据,分为轮询和长轮询,主要写法上有点区别。

轮询

轮询是一种“拉”取信息的工作模式,设置一个定时器,定时询问服务器是否有信息,每次建立连接传输数据之后,链接会关闭,演示代码如下:

var polling = function(url, type, data){

var xhr = new XMLHttpRequest(),

type = type || "GET",

data = data || null;

xhr.onreadystatechange = function(){

if(xhr.readyState == 4) {

receive(xhr.responseText);

xhr.onreadystatechange = null;

}

};

xhr.open(type, url, true);

xhr.send(type == "GET" ? null : data);

};

//定时器

var timer = setInterval(function(){

polling();

}, 1000);

长轮询

长轮询其实也没啥特殊的地方,就是在xhr对象关闭连接的时候马上又发起请求,让连接一直持续进行,演示代码如下:

var longPoll = function(type, url){

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){

// 状态为 4,数据传输完毕,重新递归连接

if(xhr.readyState == 4) {

receive(xhr.responseText);

xhr.onreadystatechange = null;

longPoll(type, url);

}

};

xhr.open(type, url, true);

xhr.send();

}

2、websocket

websocket是前端一个神器,ajax用了这么久了,相关技术也是很成熟,不过实现数据的拉取非常不划算。

ajax是基于HTTP协议,HTTP协议是单向通信协议,只有客户端发起HTTP请求,服务端才会返回数据。

而WebSocket协议是双向通信协议,在建立连接之后,客户端和服务器都可以主动向对方发送或接受数据。WebSocket协议建立的前提需要借助HTTP协议,建立连接之后,持久连接的双向通信就与HTTP协议无关了。

下面直接上代码,自从有了websocket,是不是感觉世界变得轻巧很多了。

var ws = new WebSocket("ws://www.example.com:8888");

ws.onopen = function(evt){};

ws.onmessage = function(evt){

deal(evt.data);

};

ws.onclose = function(evt){};

//ws.close();

新建一个WebSocket实例,一切就OK了,ws:// 是websocket的连接协议,8888为端口号码。onmessage中提供了data这个属性,相当方便

分享好友

分享这个小栈给你的朋友们,一起进步吧。

应用开发
创建时间:2020-06-17 15:31:04
应用软件开发是指使用程序语言C#、java、 c++、vb等语言编写,主要是用于商业、生活应用的软件的开发。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~