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###