亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node.js中的socket.io入門(mén)實(shí)例

 更新時(shí)間:2014年04月26日 10:13:58   作者:  
這篇文章主要介紹了node.js中的socket.io入門(mén)實(shí)例,并對(duì)websocket等反向ajax技術(shù)做了介紹,需要的朋友可以參考下

關(guān)于websocket等反向ajax技術(shù)介紹

在實(shí)時(shí)web應(yīng)用中,常見(jiàn)的方法是反向Ajax。反向Ajax的定義:

反向Ajax(Reverse Ajax)本質(zhì)上則是這樣的一種概念:能夠從服務(wù)器端向客戶(hù)端發(fā)送數(shù)據(jù)。在一個(gè)標(biāo)準(zhǔn)的HTTP Ajax請(qǐng)求中,數(shù)據(jù)是發(fā)送給服務(wù)器端的,反向Ajax可以某些特定的方式來(lái)模擬發(fā)出一個(gè)Ajax請(qǐng)求,這些方式本文都會(huì)論及,這樣的話(huà),服務(wù)器就可以盡可能快地向客戶(hù)端發(fā)送事件(低延遲通信)。

反向Ajax技術(shù)主要有兩點(diǎn)內(nèi)容:一是服務(wù)器端保持住TCP連接直到其有數(shù)據(jù)發(fā)送給客戶(hù)端(可以使用循環(huán)和睡眠實(shí)現(xiàn)),二是客戶(hù)端js編程技巧。

websocket是html5的規(guī)范,也屬于反ajax技術(shù)。

socket.io實(shí)現(xiàn)反向AJAX技術(shù)實(shí)例

socket.io官方介紹:

Socket.IO aims to make realtime apps possible in every browser and mobile device, blurring the differences between the different transport mechanisms. It's care-free realtime 100% in JavaScript. In order to provide realtime connectivity on every browser, Socket.IO selects the most capable transport at runtime, without it affecting the API. WebSocket Adobe® Flash® Socket AJAX long polling AJAX multipart streaming Forever Iframe JSONP Polling

簡(jiǎn)單來(lái)說(shuō)socket.io是一個(gè)基于nodejs的庫(kù),其對(duì)多種反向ajax技術(shù)進(jìn)行了包裝并統(tǒng)一了接口。在運(yùn)行時(shí)候socket.io自動(dòng)根據(jù)瀏覽器的情況選擇合適的反向ajax技術(shù)與socket.io服務(wù)器進(jìn)行交互。如果說(shuō)websocket等技術(shù)是規(guī)范的話(huà),那么socket.io則屬于應(yīng)用。

下面說(shuō)一下如何安裝(作者使用Linux Mint 16):

安裝node.js:

復(fù)制代碼 代碼如下:
sudo apt-get install nodejs

輸入命令nodejs即可進(jìn)入shell模式。

安裝npm:

復(fù)制代碼 代碼如下:
sudo apt-get install npm

安裝socket.io:
復(fù)制代碼 代碼如下:
sudo npm install socket.io

安裝包存放在~/node_modules目錄下,客戶(hù)端socket.io.js存放在~/node_modules/socket.io/node_modules/socket.io-client/dist目錄下。

socket.io示例

以下示例來(lái)自官方網(wǎng)站并做了適當(dāng)修改。

首先建立server端(服務(wù)端)代碼(文件test.js):

復(fù)制代碼 代碼如下:

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

io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});


服務(wù)端test.js綁定了8080端口,當(dāng)一個(gè)客戶(hù)端連接服務(wù)端test.js時(shí)候,服務(wù)端test.js向客戶(hù)端發(fā)出news指令并傳送數(shù)據(jù){ hello: 'world' };而服務(wù)端test.js收到my other event指令時(shí)候會(huì)調(diào)用回調(diào)函數(shù)function (data) { console.log(data);}來(lái)處理接收到的數(shù)據(jù)data。

筆者搭建了nginx服務(wù)器,其使用的80端口,web根目錄為/usr/share/nginx/html。將~/node_modules/socket.io/node_modules/socket.io-client/dist下的socket.io.min.js復(fù)制到web根目錄,并在在web根目錄下建立文件index.php(作為客戶(hù)端),內(nèi)容如下:

復(fù)制代碼 代碼如下:

<html>
<head>
</head>
<script src="socket.io.min.js"></script>
<body>
<script>
  var socket = io.connect('http://localhost:8080');
  socket.on('news', function (data) {
    console.log(data);
    console.log(data["hello"]);
    socket.emit('my other event', { my: 'data' });
  });
</script>
</body>

</html>

上面代碼中,socket綁定了8080端口,也就是綁定了server端。socket.on()指定了當(dāng)收到news指令時(shí)候,應(yīng)該如何處理收到的指令對(duì)應(yīng)的數(shù)據(jù),socket.emit()向server端發(fā)送指令和數(shù)據(jù)。

運(yùn)行server端:

復(fù)制代碼 代碼如下:
$ nodejs test.js

運(yùn)行客戶(hù)端并進(jìn)行觀察:打開(kāi)瀏覽器,進(jìn)入http://127.0.0.1訪問(wèn)index.php,并打開(kāi)firebug查看信息。

上圖來(lái)自firebug,表明了客戶(hù)端index.php連接服務(wù)端test.js后收到了來(lái)自服務(wù)端test.js的數(shù)據(jù){hello:"world"}。同時(shí)也能夠看到index.php訪問(wèn)server的網(wǎng)址并非簡(jiǎn)單的http://localhost:8080。

上圖顯示了服務(wù)端test.js的處理過(guò)程。
上圖是客戶(hù)端index.php第一次向服務(wù)端test.js發(fā)送的http頭。

上圖是客戶(hù)端index.php第2次向服務(wù)端test.js發(fā)送的http頭。使用了websocket規(guī)范。
當(dāng)關(guān)掉服務(wù)端test.js時(shí)候客戶(hù)端index.php出現(xiàn)很多Aborted狀態(tài)(紅字部分)。

分析結(jié)束。

相關(guān)文章

  • 精通JavaScript 糾正 cleanWhitespace函數(shù)

    精通JavaScript 糾正 cleanWhitespace函數(shù)

    這個(gè)函數(shù)用在火狐(firefox)上面老是出錯(cuò),今天仔細(xì)研究了下,改正了,希望別人不要遇到我這樣的問(wèn)題
    2010-03-03
  • fullCalendar中文API官方文檔

    fullCalendar中文API官方文檔

    FullCalendar是一款基于jQuery的日歷插件,適用于各種日程安排、工作計(jì)劃等場(chǎng)景,本文是fullCalendar官方文檔的中文版,主要介紹了fullCalendar的具體屬性與方法,大家可以參考一下
    2017-02-02
  • Three.js學(xué)習(xí)之Lamber材質(zhì)和Phong材質(zhì)

    Three.js學(xué)習(xí)之Lamber材質(zhì)和Phong材質(zhì)

    本篇將介紹基本材質(zhì)以及兩種基于光照模型的材質(zhì)(Lamber與Phong),有需要的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • Three.js學(xué)習(xí)之正交投影照相機(jī)

    Three.js學(xué)習(xí)之正交投影照相機(jī)

    本篇主要介紹照相機(jī)中的正交投影照相機(jī)。學(xué)習(xí)Three.js的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • 交互式可視化js庫(kù)gojs使用介紹及技巧

    交互式可視化js庫(kù)gojs使用介紹及技巧

    這篇文章主要介紹了如何使用可視化庫(kù)gojs及使用時(shí)的小技巧,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2022-01-01
  • 基于d3.js實(shí)現(xiàn)實(shí)時(shí)刷新的折線圖

    基于d3.js實(shí)現(xiàn)實(shí)時(shí)刷新的折線圖

    本文用實(shí)例演示如何用d3.js實(shí)現(xiàn)實(shí)時(shí)刷新的折線圖,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-08-08
  • Highcharts學(xué)習(xí)之坐標(biāo)軸

    Highcharts學(xué)習(xí)之坐標(biāo)軸

    今天講交互圖表Highcharts的坐標(biāo)軸,我們將對(duì)Highcharts圖表的坐標(biāo)軸組成、坐標(biāo)軸類(lèi)型等進(jìn)行詳細(xì)系統(tǒng)講解。下面一起來(lái)看看。
    2016-08-08
  • Highcharts學(xué)習(xí)之?dāng)?shù)據(jù)列

    Highcharts學(xué)習(xí)之?dāng)?shù)據(jù)列

    數(shù)據(jù)列配置是 Highcharts 最復(fù)雜也是最靈活的配置,如果說(shuō) Highcharts 是靈活多變,細(xì)節(jié)可定制的話(huà),那么數(shù)據(jù)列配置就是這個(gè)重要特性的核心。
    2016-08-08
  • 淺談JavaScript前端開(kāi)發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)

    淺談JavaScript前端開(kāi)發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)

    以AngularJS為代表的MVVM結(jié)構(gòu)框架或庫(kù)這兩年來(lái)在前端界真是火到不行,大有對(duì)抗傳統(tǒng)jQuery綁定思想的趨勢(shì),這里我們結(jié)合傳統(tǒng)的MVC結(jié)構(gòu),來(lái)淺談JavaScript前端開(kāi)發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)
    2016-06-06
  • Three.js學(xué)習(xí)之幾何形狀

    Three.js學(xué)習(xí)之幾何形狀

    本文利用實(shí)例代碼詳細(xì)介紹了一些Three.js中的幾何形狀的實(shí)現(xiàn)過(guò)程,包括立方體、平面與球體,有需要的朋友們可以學(xué)習(xí)下。
    2016-08-08

最新評(píng)論