node中socket.io的事件使用詳解
socket.io類庫(kù)不但可以相互發(fā)送消息,而且還可以通過socket端口對(duì)象的emit方法互相發(fā)送事件.
emit在之前的事件上說過現(xiàn)在一句話帶過:emit是用來手動(dòng)觸發(fā)事件的.
socket.emit(event,data,function(data1,data2......){
});
在使用emit方法發(fā)送事件時(shí),可以再另一端使用socket端口對(duì)象的on方法會(huì)once方法監(jiān)聽.
socket.on(event,function(data,fn){
});
socket.once(event,function(data,fn){
})
上面的回調(diào)函數(shù)中的參數(shù)data:對(duì)方發(fā)送的事件中攜帶的數(shù)據(jù),
fn:對(duì)方在發(fā)送事件時(shí)指定的callback回調(diào)函數(shù).
案例1:當(dāng)服務(wù)器和客戶端連接后,向客戶端發(fā)送一個(gè)news事件,事件中攜帶一個(gè)對(duì)象,該對(duì)象的hello屬性值為"你好".在接收到客戶端發(fā)送my other event事件時(shí),在控制臺(tái)中輸出"服務(wù)器端就收到數(shù)據(jù)"+客戶端發(fā)送事件中攜帶的數(shù)據(jù).
服務(wù)器端代碼,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("服務(wù)器端接受到信息%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>
運(yùn)行結(jié)果:、

可以發(fā)現(xiàn)一點(diǎn):執(zhí)行總是在監(jiān)聽端,而不是手動(dòng)執(zhí)行端.
案例2:在手動(dòng)觸發(fā)對(duì)方事件時(shí),指定回調(diào)函數(shù).
當(dāng)客戶端和服務(wù)端連接后,向客戶端發(fā)送setName事件,事件攜帶"張三",觸發(fā)事件時(shí),指定一個(gè)回調(diào)函數(shù),該回調(diào)函數(shù)向控制臺(tái)輸出2個(gè)參數(shù)值.
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>
執(zhí)行結(jié)果:

回調(diào)函數(shù)實(shí)在觸發(fā)端執(zhí)行的.
相關(guān)文章
node.js中的http.response.getHeader方法使用說明
這篇文章主要介紹了node.js中的http.response.getHeader方法使用說明,本文介紹了http.response.getHeader的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
Node.js 使用 Express-Jwt和JsonWebToken 進(jìn)行Token身份
這篇文章主要介紹了Node.js 使用 Express-Jwt和JsonWebToken 進(jìn)行Token身份驗(yàn)證的操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
nodejs如何在package.json中設(shè)置多條啟動(dòng)命令
這篇文章主要介紹了nodejs如何在package.json中設(shè)置多條啟動(dòng)命令,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
在Linux系統(tǒng)上升級(jí)Node.js遇到GLIBC依賴問題的多種解決方案
在現(xiàn)代 Web 開發(fā)和 DevOps 實(shí)踐中,Node.js 是一個(gè)不可或缺的工具,在升級(jí) Node.js 版本時(shí),尤其是在較舊的 Linux 系統(tǒng)上,可能會(huì)遇到一些依賴庫(kù)不兼容的問題,特別是與 GLIBC 和 GLIBCXX 相關(guān)的錯(cuò)誤,本文將詳細(xì)介紹如何解決這個(gè)依賴問題,需要的朋友可以參考下2025-01-01
詳解使用 Node.js 開發(fā)簡(jiǎn)單的腳手架工具
這篇文章主要介紹了詳解使用 Node.js 開發(fā)簡(jiǎn)單的腳手架工具,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
koa大型web項(xiàng)目中使用路由裝飾器的方法示例
這篇文章主要介紹了koa大型web項(xiàng)目中使用路由裝飾器的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

