婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > HTML5 WebSocket技術使用詳解

HTML5 WebSocket技術使用詳解

熱門標簽:400電話辦理包年 本地電話機器人 微信地圖標注合并了 r語言數據可視化地圖標注 如何修改多個百度地圖標注 高德地圖地圖標注服務中心 東營電銷 隨州外呼調研系統 南寧網絡外呼系統運營商

WebSocket

WebSocket是HTML5開始提供的一種瀏覽器與服務器間進行全雙工通訊的網絡技術。

現很多網站為了實現即時通訊,所用的技術都是輪詢(polling)。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務器發出HTTP請求,然后由服務器返回最新的數據給客服端的瀏覽器,這種方式有一個很大的弊端,就是會占用很多的帶寬。

最新的輪詢效果是Comet – 用了AJAX。但這種技術雖然可達到全雙工通信,但依然需要發出請求。

使用WebSocket,瀏覽器和服務器只需要要做一個握手的動作,然后,瀏覽器和服務器之間就形成了一條快速通道,兩者之間就直接可以數據互相傳送。而且它為我們實現即時服務帶來了兩大好處:

節省資源:互相溝通的Header是很小的-大概只有 2 Bytes。
推送信息:不需要客戶端請求,服務器可以主動傳送數據給客戶端。

socket.io

Socket.IO是一個WebSocket庫,包括了客戶端的js和服務器端的nodejs,它的目標是構建可以在不同瀏覽器和移動設備上使用的實時應用。

socket.io的特點

易用性:socket.io封裝了服務端和客戶端,使用起來非常簡單方便。

跨平臺:socket.io支持跨平臺,這就意味著你有了更多的選擇,可以在自己喜歡的平臺下開發實時應用。

自適應:它會自動根據瀏覽器從WebSocket、AJAX長輪詢、Iframe流等等各種方式中選擇最佳的方式來實現網絡實時應用,非常方便和人性化,而且支持的瀏覽器最低達IE5.5。

WebSocket 安裝部署

npm install socket.io

服務監聽

socket.io的服務端啟動非常的簡單,引用socket.io模塊。

var io = require('socket.io');

然后調用listen函數,傳入監聽的端口號,開始服務監聽。啟用了80端口用于測試:

var io = require('socket.io')(80);

注冊事件

io.on('connection', function (socket) {
  socket.on('disconnect', function () {

  })
})

connection事件在客戶端成功連接到服務端時觸發,有了這個事件,我們可以隨時掌握用戶連接到服務端的信息。

當客戶端成功建立連接時,在connection事件的回調函數中,我們還是可以為socket注冊一些常用的事件,如:disconnect事件,它在客戶端連接斷開是觸發,這時候我就知道用戶已經離開了。

WebSocket 啟動服務

目前為止,我們已經搭建好了一個最簡單的socket服務器,為了在瀏覽器中能夠訪問到我們的服務,我們還需要在服務端搭建一個簡單的web服務器,讓瀏覽器能夠訪問我們的客戶端頁面。

為了便捷,我們選用node.js中常用的express框架來實現web服務,示例如下:

var express = require('express');
var app = express();
app.get('/', function (req, res) {
  res.status(200).send('成功連接!')
});
var server = require('http').createServer(app);
var io = require('socket.io')(server);
io.on('connection', function (socket) {

});
server.listen(80);

WebSocket 客戶端引用

服務端構建完畢,下面看一看客戶端應該如何使用。

服務端運行后會在根目錄動態生成socket.io的客戶端js文件,客戶端可以通過固定路徑/socket.io/socket.io.js添加引用。

首先添加網頁index.html,并在網頁中引用客戶端js文件:

script src="http://cdn.bootcss.com/socket.io/2.0.2/socket.io.js">/script>

WebSocket 連接服務

當客戶端成功加載socket.io客戶端文件后會獲取到一個全局對象io,我們將通過io.connect函數來向服務端發起連接請求。

var socket = io.connect('/');
socket.on('connect',function(){
  //連接成功
});
socket.on('disconnect',function(data){
  //連接斷開
});

connect函數可以接受一個url參數,url可以socket服務的http完整地址,也可以是相對路徑,如果省略則表示默認連接當前路徑。與服務端類似,客戶端也需要注冊相應的事件來捕獲信息,不同的是客戶端連接成功的事件是connect。

了解了客戶端如何使用,下面我們創建網頁index.html,并添加如下內容(保存):

html>
head>
  script src="http://cdn.bootcss.com/socket.io/2.0.2/socket.io.js">/script>
  script>
    window.onload = function(){
      var socket = io.connect('/');
      socket.on('connect',function(){
        document.write('連接成功!');
      });
    };
  /script>
/head>
body>
/body>
/html>

頁面添加完畢還要記得在服務端app.js中為它添加路由,讓我們可以訪問測試網頁:

app.get('/index',function(req,res){
  res.sendFile('index.html',{root:__dirname});
});

WebSocket 實時通訊

服務端和客戶端都構建完畢了,下面開始發送消息。

當我們成功建立連接后,我們可以通過socket對象的send函數來互相發送消息,示例-客戶端向服務端發送消息(index.html):

var socket = io.connect('/');
socket.on('connect',function(){
  //客戶端連接成功后發送消息'hello world!'
  socket.send('hello world!');
});
socket.on('message',function(data){
  alert(data);
});

連接成功后,我們向服務端發送消息hello world!,還為socket注冊了message事件,它是send函數對應的接收消息的事件,當服務端向客戶端send消息時,我們就可以在message事件中接收到發送過來的消息。

服務端向客戶端發送消息也可以通過send的方式,示例 - 服務端向客戶端發送消息(app.js):

var io = require('scoket.io');
io.on('connection', function (socket) {
  socket.send('Hello World!');
  socket.on('message', function (data) {
    console.log(data);
  })
});

與客戶端相同,服務端也需要為socket注冊message事件來接收客戶端發送過來的消息。

WebSocket 發送信息

socket.io既然是用來實現通訊的,那么如何發送、接收信息才是根本。

在socket.io中,emit函數用于發送數據,我們使用send的方式實現了信息的互發,其實send函數只是emit的封裝,實際上還是使用了emit,且看send函數是如何實現的:

function send(){
 var args = toArray(arguments);
 args.unshift('message');
 this.emit.apply(this, args);
 return this;
}

在send函數中,獲取到原來的參數,并在原來的基礎上插入了一個參數message,然后調用了emit函數。通過send函數的實現,我們也學會了emit函數的用法,它有多個參數,第一個參數是事件名稱,在接收端注冊該事件就可以接收到發送過去的信息,事件名稱可以自由定義,在不同的場景下,我們可以定義不同的事件來接收消息。第二個參數才是發送的數據。了解清楚了工作原理,下面來將send替換成emit函數發送信息:

//app.js
io.on('connection',function(socket){
   socket.emit('message','連接成功!');
   socket.on('message',function(data){
  });
});

WebSocket 服務端事件

事件監聽是實現通訊的基礎,因此充分了解socket.io的事件,學習如何在正確的時候使用它們至關重要。在一些關鍵的的狀態下,socket.io可以注冊相應的事件,通過事件監聽,我們可以在這些事件中作出反應,常用的事件如下:

connection——客戶端成功連接到服務器。

message——捕獲客戶端send信息。。

disconnect——客戶端斷開連接。

error——發生錯誤。

WebSocket 客戶端

較服務端而言,客戶端提供更多的監聽事件,在實時應用中,我們可以為這些事件注冊監聽并作出反應,例如:connect提示用戶連接成功,disconnect時提示用戶停止服務等等。

connection——成功連接到服務器。

connecting——正在連接。

disconnect——斷開連接。

connect_failed——連接失敗。

error——連接錯誤。

message——監聽服務端send的信息。

reconnect_failed——重新連接失敗。

reconnect——重新連接成功。

reconnecting——正在重連。

那么客戶端socket發起連接時的順序是怎么樣的呢?當第一次連接時,事件觸發順序為: connecting → connect;

當失去連接時,事件觸發順序為:disconnect → reconnecting → connecting → reconnect → connect。

WebSocket 命名空間

命名空間著實是一個非常實用好用的功能。我們可以通過命名空間,劃分出不同的房間,在房間里的廣播和通信都不會影響到房間以外的客戶端。

那么如何創建房間呢?在服務端,通過of("")的方式來劃分新的命名空間:

io.of('chat').on('connection',function(socket){
});

示例中,我們創建一個名為chat的房間,客戶端可以通過如下方式連接到指定的房間:

var socket = io.connect('/chat');

雖然連接到指定的房間,但是我們也可以在服務端操作,自由的進出房間:

socket.join('chat');//進入chat房間
socket.leave('chat');//離開chat房間

WebSocket 廣播消息

在實時應用中,廣播是一個不可或缺的功能,socket.io提供兩種服務端廣播方式。

第一種廣播方式可以稱之為'全局廣播',顧名思義,全局廣播就是所有連接到服務器的客戶端都會受到廣播的信息:

socket.broadcast.emit('DATA',data);

但是,在實際應用場景中,我們很多時候并不需要所有用戶都收到廣播信息,有的廣播信息只發送給一部分客戶端,比如某個房間里面的用戶,那么可以使用如下方式:

socket.broadcast.to('chat').emit('DATA',data);

中間件

socket.io提供中間件功能,我們可以通過中間件來對請求進行預處理,比如身份驗證:

io.use(function(socket, next){
 if (socket.request.headers.cookie) return next();
 next(new Error('Authentication error'));
});

示例中展示了通過中間件進行身份驗證,當沒有cookie的時候拋出異常。

傳遞參數

在很多應用場景中,客戶端發起連接請求時都需要傳遞參數,這些參數可能是身份驗證、初始化設置等等,那么socket.io發起連接時如何傳遞參數呢?

var socket = io.connect('/');

由于connect函數發起連接的參數是一個url,你可能會想到把參數拼接到url上,如http://xxxx?xx=xxxx,但是很遺憾這樣是行不通的,我們可以通過這樣的方式來傳遞參數:

var socket = io.connect('/',{ _query:'sid=123456' });

在服務端可以這樣獲取到傳遞的參數:

io.use(function(socket){
   var query = socket.request._query;
   var sid = query.sid; 
});

客戶端傳遞的參數已經被解析成了一個json對象,這個對象就是_query。

您可能感興趣的文章:
  • php使用websocket示例詳解
  • Javascript WebSocket使用實例介紹(簡明入門教程)
  • Nginx反向代理websocket配置實例
  • Python通過websocket與js客戶端通信示例分析
  • 使用Java和WebSocket實現網頁聊天室實例代碼
  • Java后端Tomcat實現WebSocket實例教程
  • Android中使用WebSocket實現群聊和消息推送功能(不使用WebView)
  • 讓ie6也支持websocket采用flash封裝實現
  • Spring和Websocket相結合實現消息的推送
  • 完美解決spring websocket自動斷開連接再創建引發的問題
  • JavaScript之WebSocket技術詳解
  • 淺析nodejs實現Websocket的數據接收與發送
  • 微信小程序 WebSocket詳解及應用
  • 使用swoole擴展php websocket示例
  • php中使用websocket詳解
  • php+html5基于websocket實現聊天室的方法
  • 詳解WebSocket+spring示例demo(已使用sockJs庫)
  • C#實現WebSocket協議客戶端和服務器websocket sharp組件實例解析

標簽:德州 寧夏 拉薩 宿遷 果洛 西雙版納 益陽 黃石

巨人網絡通訊聲明:本文標題《HTML5 WebSocket技術使用詳解》,本文關鍵詞  HTML5,WebSocket,技術,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5 WebSocket技術使用詳解》相關的同類信息!
  • 本頁收集關于HTML5 WebSocket技術使用詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产综合久久久久久鬼色| 亚洲激情一二三区| 国产精品毛片a∨一区二区三区| 日韩1区2区日韩1区2区| 日韩一区二区三区在线视频| 中文字幕日韩av资源站| www.一区二区| 亚洲黄色av一区| 91超碰这里只有精品国产| 亚洲自拍偷拍av| 日韩一级黄色大片| 国产91综合一区在线观看| 国产精品国产三级国产三级人妇| 91丨九色丨黑人外教| 亚洲综合成人网| 欧美一区二区三区人| 国产综合久久久久久久久久久久| 国产精品私人影院| 欧美日韩黄色影视| 麻豆91在线观看| 久久九九久精品国产免费直播| 成人综合婷婷国产精品久久免费| 亚洲欧美一区二区三区孕妇| 欧美日韩五月天| 狠狠色丁香久久婷婷综合丁香| 国产亚洲va综合人人澡精品 | 精品国产乱码久久久久久影片| 国产一区二区在线视频| 亚洲美女少妇撒尿| 精品国产乱码久久久久久图片| 粉嫩av亚洲一区二区图片| 亚洲夂夂婷婷色拍ww47| 久久影院电视剧免费观看| 91一区二区在线| 毛片av中文字幕一区二区| 国产精品视频免费| 日韩精品一区二区三区在线观看| www.亚洲在线| 激情小说亚洲一区| 污片在线观看一区二区| 欧美激情一区二区三区在线| 在线一区二区三区四区| 国产成人精品免费看| 日韩精品欧美精品| ...中文天堂在线一区| 日韩无一区二区| 欧美视频三区在线播放| 国产成人高清在线| 精彩视频一区二区| 亚洲18色成人| 一区二区三区日韩精品| 国产亚洲午夜高清国产拍精品| 欧美日韩精品综合在线| 91网页版在线| 97国产一区二区| 成人精品免费视频| 国产成人鲁色资源国产91色综 | 国产成人精品一区二| 男女男精品视频| 日韩中文字幕一区二区三区| 性欧美疯狂xxxxbbbb| 亚洲国产精品人人做人人爽| 中文字幕在线播放不卡一区| 久久一夜天堂av一区二区三区| 日韩一区二区在线免费观看| 777色狠狠一区二区三区| 欧美日韩成人综合天天影院| 欧美丝袜自拍制服另类| 欧美日韩视频专区在线播放| 欧美日本高清视频在线观看| 99久久免费国产| 日韩电影网1区2区| 亚洲国产三级在线| 亚洲视频综合在线| 国产精品乱码人人做人人爱 | 97超碰欧美中文字幕| 五月婷婷综合在线| 亚洲国产wwwccc36天堂| 日韩国产一区二| 久久成人免费电影| 亚洲色图制服诱惑 | 精品国产免费人成电影在线观看四季 | 久久99精品国产| 国产乱人伦偷精品视频不卡 | 精品一区二区三区的国产在线播放 | 久久99精品久久久久婷婷| 国产精品一卡二| 91美女视频网站| 欧美精品 日韩| 日韩欧美色综合| 欧美xxxxxxxx| 国产精品美女一区二区三区| 亚洲黄网站在线观看| 男女视频一区二区| 9i在线看片成人免费| 在线亚洲人成电影网站色www| 欧美日韩免费高清一区色橹橹| 欧美一区二区三区四区久久| 国产精品护士白丝一区av| 日韩制服丝袜av| 99精品国产91久久久久久| 欧美日本一区二区| 国产拍揄自揄精品视频麻豆| 亚洲国产欧美在线| 国产成人午夜视频| 666欧美在线视频| 最近日韩中文字幕| 韩国v欧美v日本v亚洲v| 在线观看中文字幕不卡| 国产午夜精品美女毛片视频| 亚洲成人动漫精品| 91原创在线视频| 国产亚洲一区二区三区四区 | 精品欧美一区二区在线观看| 最新成人av在线| 韩国成人精品a∨在线观看| 日本国产一区二区| 久久亚洲综合av| 丝袜美腿高跟呻吟高潮一区| 成人精品小蝌蚪| 欧美精品一区二区在线播放| 五月激情综合网| 欧美三级一区二区| 中文字幕一区二区三区四区不卡| 国产美女一区二区三区| 欧美一区二区三区视频免费| 亚洲电影激情视频网站| 91丨porny丨中文| 国产精品国产精品国产专区不片| 国产精品一二三四| 成人中文字幕在线| 久久精品国产成人一区二区三区 | 日本91福利区| 91视频国产观看| 亚洲国产欧美日韩另类综合| 成人免费一区二区三区在线观看| 成人国产精品免费观看视频| 国产精品影视在线| 亚洲综合一二区| 日韩免费观看高清完整版| 夜夜嗨av一区二区三区网页| 狠狠v欧美v日韩v亚洲ⅴ| 欧美三级日韩在线| 国产精品电影院| 99国产精品99久久久久久| 中文字幕不卡的av| 国产精品99久久久久久有的能看| 9191国产精品| 免费观看一级特黄欧美大片| 在线综合亚洲欧美在线视频| 婷婷夜色潮精品综合在线| 欧美日韩午夜在线| 天天影视色香欲综合网老头| 欧美日韩一区二区三区不卡| 亚洲一二三区视频在线观看| 欧美日韩精品电影| 欧美aaaaa成人免费观看视频| 日韩欧美国产午夜精品| 国产综合色精品一区二区三区| 国产亚洲欧美在线| 国产精品1区2区| 国产精品国产自产拍高清av | 91福利视频久久久久| 日韩电影在线免费| 国产亚洲欧美日韩俺去了| 99视频一区二区| 午夜欧美一区二区三区在线播放| 日韩一区二区三区精品视频| 高清不卡一二三区| 一区二区欧美在线观看| 欧美精品免费视频| 国产成人av一区二区三区在线| 亚洲欧美在线高清| 91超碰这里只有精品国产| 国产大陆亚洲精品国产| 亚洲欧美日韩国产一区二区三区| 欧美色图在线观看| 国产在线不卡一卡二卡三卡四卡| 中文字幕亚洲区| 欧美一级二级在线观看| 成人手机在线视频| 美女一区二区在线观看| 国产精品欧美极品| 91精品国产麻豆| 色老汉一区二区三区| 久久精品国产第一区二区三区| 亚洲另类在线视频| 国产日韩欧美a| 一区二区三区四区国产精品| 亚洲二区在线观看| 波多野结衣中文一区| 欧美一区二区三区喷汁尤物| 2024国产精品视频| 国产一区二区三区精品视频| 成人av网站免费观看| 337p亚洲精品色噜噜| 国产曰批免费观看久久久| 在线观看一区不卡| 国产一区二区三区观看| 亚洲成a人在线观看|