HTML5 之 Websocket

什么是 WebSocket

WebSocket的服务端和客户端可以双向进行通讯,并且允许跨域通讯。由HTTP/1.1Upgrade机制支持,通过ws(非加密)或wss(加密)协议进行通讯

WebSocket WebSocket(
  in DOMString url,
  in optional DOMString protocols
);

WebSocket WebSocket(
  in DOMString url,
  in optional DOMString[] protocols
);

HTML5 中的 WebSocket

HTML5只专注于客户端的API, 而服务器端是各个语言自己去实现

// 创建一个Socket实例
var socket = new WebSocket('ws://localhost:8080');
// 打开Socket 
socket.onopen = function(event){
  // 发送一个初始化消息
  socket.send('I am the client and I\'m listening!');
  // 监听消息
  socket.onmessage = function(event){
    console.log('Client received a message',event);
  };
  // 监听Socket的关闭
  socket.onclose = function(event){
    console.log('Client notified socket has closed',event);
  };
  // 关闭Socket.... 
  //socket.close()
};

事件
onclose onerror onmessage onopen

属性

  • readyState: CONNECTING 0 OPEN 1 CLOSING 2 CLOSED 3
  • binaryType: String Blob ArrayBuffer

兼容性

方法1:
如果客户端不支持WebSocket, 那么可以使用几个候选选项 Flash Socket AJAX long-polling AJAX multipart streaming IFrame JSONP polling

方法2
使用Socket.io来抹平差异,该库可以在浏览器不支持WebSocket的时候, 自动用浏览器支持的消息推送方式进行连接, 该库还会检测连接是否掉线,并在掉线时自动为你重新连接。

// 创建Socket.IO实例,建立连接
var socket= new io.Socket('localhost',{
  port: 8080,
});
socket.connect();
// 添加一个连接监听器
socket.on('connect',function(){
  console.log('Client has connected to the server!');
});
// 添加一个连接监听器
socket.on('message',function(data){
  console.log('Received a message from the server!',data);
});
// 添加一个关闭连接的监听器
socket.on('disconnect',function(){
  console.log('The client has disconnected!');
});
// 通过Socket发送一条消息到服务器
function sendMessageToServer(message){
  socket.send(message);
}

优势

  • 实时双向通信
  • 浏览器本地支持良好(兼容性可以用第三方库很好解决)
  • 支持自定义协议

实际应用

  • 聊天室
  • 服务器消息推送
  • 前后端实时系统

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • WebSocket简介 谈到Web实时推送,就不得不说WebSocket。在WebSocket出现之前,很多网站为...
    吧啦啦小汤圆阅读 8,192评论 15 75
  • 女子在山间采花,偶然瞥见一白衣飘飘,风华正茂的公子乘车离去,不禁动了心。便以叶为纸以石为墨书写了女子的心思并用树藤...
    冷月髒花魂阅读 352评论 0 0
  • C是一家大型跨国企业福建区域的公关部总监,学播音主持专业出身,做过电台主播(外形和气质就不需我多做介绍了吧)...
    LSukie阅读 375评论 0 0
  • 金庸小说中的人物层出不穷,不论男女,主角配角,各有特点。虽说萝卜青菜各有所爱,但总体来说,大家都会喜欢大侠,喜欢女...
    潘帕斯雄鹰阅读 5,669评论 5 35
  • 沉思了好久,一直在想。 或许,这可以被说出友谊。 你好,我是某某的作者某某 额,你好,我是... ...
    轻文艺Milo阅读 258评论 0 0