成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Web Socket & Socket.io

gougoujiang / 2990人閱讀

摘要:但是,反過(guò)來(lái)卻是不可能的服務(wù)器端發(fā)生了一個(gè)事件,服務(wù)器無(wú)法將這個(gè)事件的信息實(shí)時(shí)主動(dòng)通知它的客戶端。這種做法是無(wú)奈之舉,實(shí)際上對(duì)服務(wù)器客戶端雙方都造成了大量的性能浪費(fèi)。用于發(fā)送,用戶接受。

HTTP

HTTP無(wú)法輕松實(shí)現(xiàn)實(shí)時(shí)應(yīng)用:

HTTP協(xié)議是無(wú)狀態(tài)的,服務(wù)器只會(huì)響應(yīng)來(lái)自客戶端的請(qǐng)求,但是它與客戶端之間不具備持續(xù)連接。

我們可以非常輕松的捕獲瀏覽器上發(fā)生的事件(比如用戶點(diǎn)擊了盒子),這個(gè)事件可以輕松產(chǎn)生與服務(wù)器的數(shù)據(jù)交互(比如Ajax)。但是,反過(guò)來(lái)卻是不可能的:服務(wù)器端發(fā)生了一個(gè)事件,服務(wù)器無(wú)法將這個(gè)事件的信息實(shí)時(shí)主動(dòng)通知它的客戶端。只有在客戶端查詢服務(wù)器的當(dāng)前狀態(tài)的時(shí)候,所發(fā)生事件的信息才會(huì)從服務(wù)器傳遞到客戶端。

但是,確實(shí)聊天室確實(shí)存在

方法:

長(zhǎng)輪詢:客戶端每隔很短的時(shí)間,都會(huì)對(duì)服務(wù)器發(fā)出請(qǐng)求,查看是否有新的消息,只要輪詢速度足夠快,例如1秒,就能給人造成交互是實(shí)時(shí)進(jìn)行的印象。這種做法是無(wú)奈之舉,實(shí)際上對(duì)服務(wù)器、客戶端雙方都造成了大量的性能浪費(fèi)。

長(zhǎng)連接:客戶端只請(qǐng)求一次,但是服務(wù)器會(huì)將連接保持,不會(huì)返回結(jié)果(想象一下我們沒(méi)有寫res.end()時(shí),瀏覽器一直轉(zhuǎn)小菊花)。服務(wù)器有了新數(shù)據(jù),就將數(shù)據(jù)發(fā)回來(lái),又有了新數(shù)據(jù),就將數(shù)據(jù)發(fā)回來(lái),而一直保持掛起狀態(tài)。這種做法的也造成了大量的性能浪費(fèi)。

WebSocket協(xié)議

WebSocket協(xié)議能夠讓瀏覽器和服務(wù)器全雙工實(shí)時(shí)通信,互相的,服務(wù)器也能主動(dòng)通知客戶端

WebSocket的原理非常的簡(jiǎn)單:利用HTTP請(qǐng)求產(chǎn)生握手,HTTP頭部中含有WebSocket協(xié)議的請(qǐng)求,所以握手之后,二者轉(zhuǎn)用TCP協(xié)議進(jìn)行交流(QQ的協(xié)議)。現(xiàn)在的瀏覽器和服務(wù)器之間,就是QQ和QQ服務(wù)器的關(guān)系了。所以WebSocket協(xié)議,需要瀏覽器支持,更需要服務(wù)器支持。

支持WebSocket協(xié)議的瀏覽器有:Chrome 4、火狐4、IE10、Safari5

支持WebSocket協(xié)議的服務(wù)器有:Node 0、Apach7.0.2、Nginx1.3

Socket.IO是業(yè)界良心,新手福音。它屏蔽了所有底層細(xì)節(jié),讓頂層調(diào)用非常簡(jiǎn)單。并且還為不支持WebSocket協(xié)議的瀏覽器,提供了長(zhǎng)輪詢的透明模擬機(jī)制。

Node.js上需要寫一些程序,來(lái)處理TCP請(qǐng)求。 使用require("dgram") 模塊

Node的單線程、非阻塞I/O、事件驅(qū)動(dòng)機(jī)制,使它非常適合Socket服務(wù)器。

Socket.io
npm install socket.io

制作index.html頁(yè)面。頁(yè)面中必須引入 /socket.io/socket.io.js, 調(diào)用io函數(shù),取得socket對(duì)象。


服務(wù)器中:

var io = require("sockte.io")(server);
io.on("connection",function( socket ){
    //socket 對(duì)象
    socket.on("tiwen",function( msg ){
        console.log("服務(wù)器接受到了請(qǐng)求");
        //sockte.emit("huida","ok"); //單條返回
        //廣播 , 就是給當(dāng)前所有用戶的發(fā)送信息。
        io.emit("huida","ok");
    });
});

客戶端和服務(wù)器,都有socket對(duì)象。 兩個(gè)對(duì)象都具有emit,和on的時(shí)間。emit用于發(fā)送,on用戶接受。
發(fā)送的內(nèi)容可以是任何類型的值。

案例

前臺(tái)頁(yè)面:



index頁(yè)面

信息內(nèi)容: 發(fā)送:

后臺(tái):

var http = require("http");
var fs = require("fs");

var server = http.createServer(function ( req,res ) {
  if (  req.url == "/" ) {
    // 顯示首頁(yè)
    fs.readFile("./index.html",function ( err,data ) {
      res.end(data);
    });
  }
});


// 創(chuàng)建io對(duì)象
var io = require("socket.io")(server);

// 監(jiān)聽連接事件
io.on("connection",function ( socket ) {
  console.log( "一個(gè)客戶端連接了" );
  socket.on("tiwen",function ( msg ) {
        // console.log( "提問(wèn)為:" + msg );
        // socket.emit("huida","好呀");
    // 加上廣播
    io.emit("huida",msg);
  });
});

server.listen(80);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86359.html

相關(guān)文章

  • 【Node之web通信Socket.IO

    摘要:簡(jiǎn)介是的一個(gè)模塊,他提供通過(guò)進(jìn)行通信的一種簡(jiǎn)單方式,協(xié)議很復(fù)雜,但是提供了服務(wù)器和客戶端雙方的組件,所以只需要一個(gè)模塊就可以給應(yīng)用程序加入對(duì)的支持。而且還能支持不同的瀏覽器。它們之間有什么區(qū)別呢區(qū)別在于的是持久性的。 環(huán)境:Node v8.2.1; Npm v5.3.0; OS Windows10 在web開發(fā)中,我們使用HTTP協(xié)議,HTTP協(xié)議是基于文本的單向通訊機(jī)制,當(dāng)我們想要從...

    xzavier 評(píng)論0 收藏0
  • Node.js和Socket.IO搭建Web Chat application

    摘要:是,是的,它可以建立起一個(gè)基于事件的實(shí)時(shí)的雙向交流方式,極大的簡(jiǎn)化了的處理過(guò)程。開始搭建這個(gè)應(yīng)用幾乎只需要和最初級(jí)的知識(shí),因?yàn)橹淮罱ㄒ粋€(gè)基本的程序。安裝好后創(chuàng)建一個(gè),來(lái)配置應(yīng)用。 WebSocket與Socket.IO WebSocket是一種協(xié)議,有了它就可以在TCP協(xié)議的基礎(chǔ)上在瀏覽器和服務(wù)器之間建立起了一種全雙工的通道,它完全兼容HTTP協(xié)議,有了它使得Web應(yīng)用程序可以在瀏覽器...

    kviccn 評(píng)論0 收藏0
  • vue2.0開發(fā)聊天程序(六) 服務(wù)端的webScoket

    大吉大利,今晚吃雞!                   - PUBG 時(shí)隔多日,終于再次拾起這個(gè)拖了很久的項(xiàng)目。并不是因?yàn)闆](méi)時(shí)間,也不是因?yàn)檫@個(gè)項(xiàng)目對(duì)于我來(lái)說(shuō)有多困難,就是一個(gè)字————懶。此項(xiàng)目的后臺(tái),當(dāng)然是選擇node.js來(lái)實(shí)現(xiàn)。作為一個(gè)前端,node.js比起java、php簡(jiǎn)單多了。 node支持的webSocket 在npm中有很多支持webSocket的模塊,包括socket.io...

    hiyayiji 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<