HTML5 webSocket 替代ajax

webSocket和nodeJS結(jié)合使用

異步傳輸,數(shù)據(jù)雙向傳遞,大大提高效率,節(jié)約資源
1、需要在服務(wù)器環(huán)境下
2、如果結(jié)合nodeJS使用需要先安裝node
3、還需要安裝socket.io:npm install socket.io

Paste_Image.png

4、客戶端代碼

<script src="/socket.io/socket.io.js"></script>
<script>
    var ws = io.connect('ws://localhost:8080');
    //接收數(shù)據(jù)
    ws.on('time',function(result){
        console.log(result);
    });
    //發(fā)送數(shù)據(jù)
    ws.emit('action','arg1','arg2');
</script>
</head>
<body>
    客戶端 
</body>

對(duì)emit()(發(fā)送的數(shù)據(jù))on()和(接受數(shù)據(jù))的解釋:

socket.emit('action');表示發(fā)送了一個(gè)action命令,命令是字符串的
在另一端接收時(shí),可以這么寫: socket.on('action',function(){...});
socket.emit('action',data);表示發(fā)送了一個(gè)action命令,還有data數(shù)據(jù),
在另一端接收時(shí),可以這么寫: socket.on('action',function(data){...});
socket.emit(action,arg1,arg2); 表示發(fā)送了一個(gè)action命令,還有兩個(gè)數(shù)據(jù),
在另一端接收時(shí),可以這么寫: socket.on('action',function(arg1,arg2){...});
在emit方法中包含回調(diào)函數(shù),例如:
socket.emit('action',data, function(arg1,arg2){...} );那么這里面有一個(gè)回調(diào)函數(shù)可以在另一端調(diào)用,
另一端可以這么寫:socket.on('action',function(data,fn){   fn('a','b') ;  });
上面的data數(shù)據(jù)可以有0個(gè)或者多個(gè),相應(yīng)的在另一端改變function中參數(shù)的個(gè)數(shù)即可,
function中的參數(shù)個(gè)數(shù)和順序應(yīng)該和發(fā)送時(shí)一致
上面的fn表示另一個(gè)端傳遞過來的參數(shù),是個(gè)函數(shù),寫fn('a','b') ;會(huì)回調(diào)函數(shù)執(zhí)行。
一次發(fā)送不應(yīng)該寫多個(gè)回調(diào),否則只有最后一個(gè)起效,回調(diào)應(yīng)作為最后一個(gè)參數(shù)。

5、服務(wù)器,js文件的內(nèi)容,eg:server.js

//1.引入模塊
var http = require('http');
var fs = require('fs');
var io = require('socket.io');
//創(chuàng)建服務(wù)器
var httpObj  = http.createServer(function(req,res){
//因?yàn)樯厦嫘陆ǖ哪夸浝锩嬗衱ww,在這里需要加上www,讀取文件
    fs.readFile('www'+req.url,function(err,data){
        if(err){
            res.write('404');
            res.end();
        }else{
            res.write(data);
            res.end();
        }
    });
});
//監(jiān)聽8080端口 
httpObj.listen(8080);
// 創(chuàng)建一個(gè)Socket.IO實(shí)例,把它傳遞給服務(wù)器
var ws = io.listen(httpObj);
//添加一個(gè)連接監(jiān)聽器
ws.on('connection',function(socket){
//加上定時(shí)器發(fā)送數(shù)據(jù)
    setInterval(function(){
        //發(fā)送數(shù)據(jù)
        socket.emit('time',Date.now());
    },1000);
    socket.on('action',function(name,value){
        console.log(name,value);
    });
});

6、然后在服務(wù)文件server.js目錄文件下,打開npm
輸入:node servse.js
開啟服務(wù)器后,打開8080端口,就可以看到數(shù)據(jù)交互的結(jié)果。
感謝chszs 對(duì)我學(xué)習(xí)webSocket提供幫助http://www.itpub.net/thread-1373652-1-1.html###

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容