DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> node中socket.io的事件使用詳解
node中socket.io的事件使用詳解
編輯:關於JavaScript     

socket.io類庫不但可以相互發送消息,而且還可以通過socket端口對象的emit方法互相發送事件.

emit在之前的事件上說過現在一句話帶過:emit是用來手動觸發事件的.

代碼如下:
socket.emit(event,data,function(data1,data2......){
});

在使用emit方法發送事件時,可以再另一端使用socket端口對象的on方法會once方法監聽.

代碼如下:
socket.on(event,function(data,fn){
});
socket.once(event,function(data,fn){
})

上面的回調函數中的參數data:對方發送的事件中攜帶的數據,

fn:對方在發送事件時指定的callback回調函數.

案例1:當服務器和客戶端連接後,向客戶端發送一個news事件,事件中攜帶一個對象,該對象的hello屬性值為"你好".在接收到客戶端發送my other event事件時,在控制台中輸出"服務器端就收到數據"+客戶端發送事件中攜帶的數據.

服務器端代碼,server.js

代碼如下:
 var http=require("http");
 var sio=require("socket.io");
 var fs=require("fs");
 var server=http.createServer(function (req,res) {
     res.writeHead(200,{"Content-type":"text/html"});
     res.end(fs.readFileSync("./index.html"));
 });
 server.listen(1337);
 var socket=sio.listen(server);
 socket.on("connection", function (socket) {
     socket.emit("news",{hello:"你好"});
     socket.on("my other event", function (data) {
         console.log("服務器端接受到信息%j",data);
     });
 });

客戶端index.html代碼:

代碼如下:
 <!DOCTYPE html>
 <html>
 <head lang="en">
     <meta charset="UTF-8">
     <title></title>
     <script src="/socket.io/socket.io.js"></script>
     <script>
         var socket=io.connect();
         socket.on("news", function (data) {
             console.log(data.hello);
             socket.emit("my other event",{my:"data"});
         });       
     </script>
 </head>
 <body>
 
 </body>

運行結果:、
 


可以發現一點:執行總是在監聽端,而不是手動執行端.

案例2:在手動觸發對方事件時,指定回調函數.

當客戶端和服務端連接後,向客戶端發送setName事件,事件攜帶"張三",觸發事件時,指定一個回調函數,該回調函數向控制台輸出2個參數值.

代碼如下:
 var http=require("http");
 var sio=require("socket.io");
 var fs=require("fs");
 var server=http.createServer(function (req,res) {
     res.writeHead(200,{"Content-type":"text/html"});
     res.end(fs.readFileSync("./index.html"));
 });
 server.listen(1337);
 var socket=sio.listen(server);
 socket.on("connection", function (socket) {
     socket.emit("setName","張三", function (data1,data2) {
         console.log(data1);
         console.log(data2);
     });
 });

代碼如下:
 <!DOCTYPE html>
 <html>
 <head lang="en">
     <meta charset="UTF-8">
     <title></title>
     <script src="/socket.io/socket.io.js"></script>
     <script>
         var socket=io.connect();
         socket.on("setName", function (name,fn) {
            console.log(name);
             fn("李四","王五");
         });     
     </script>
 </head>
 <body>
 
 </body>
 </html>

執行結果:

回調函數實在觸發端執行的.

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved