node中socket.io的事件使用详解


Posted in Javascript onDecember 15, 2014

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>

运行结果:、
 

node中socket.io的事件使用详解
可以发现一点:执行总是在监听端,而不是手动执行端.

案例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>

执行结果:

node中socket.io的事件使用详解

回调函数实在触发端执行的.

Javascript 相关文章推荐
javascript第一课
Feb 27 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
控制input输入框中提示信息的显示和隐藏的方法
Feb 12 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 Javascript
AngularJS 最常用的八种功能(基础知识)
Jun 26 Javascript
Vue 去除路径中的#号
Apr 19 Javascript
JS/jQuery实现简单的开关灯效果【案例】
Feb 19 jQuery
微信小程序上线发布流程图文详解
May 06 Javascript
微信小程序设置滚动条过程详解
Jul 25 Javascript
electron实现静默打印的示例代码
Aug 12 Javascript
Vue实现简单的拖拽效果
Aug 25 Javascript
node.js中使用socket.io的方法
Dec 15 #Javascript
Lua表达式和控制结构学习笔记
Dec 15 #Javascript
如何在node的express中使用socket.io
Dec 15 #Javascript
node.js中使用socket.io制作命名空间
Dec 15 #Javascript
node.js中的fs.fstatSync方法使用说明
Dec 15 #Javascript
node.js中的fs.fstat方法使用说明
Dec 15 #Javascript
node.js中的fs.readFileSync方法使用说明
Dec 15 #Javascript
You might like
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
Python中的两个内置模块介绍
2015/04/05 Python
Python入门必须知道的11个知识点
2018/03/21 Python
Django中信号signals的简单使用方法
2019/07/04 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
python opencv如何实现图片绘制
2020/01/19 Python
python怎么自定义捕获错误
2020/06/29 Python
英国最大的百货公司:Harrods
2016/08/18 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
商务邀请函范文
2014/01/14 职场文书
高中生期末评语
2014/01/28 职场文书
大学信息公开实施方案
2014/03/09 职场文书
留学顾问岗位职责
2014/04/14 职场文书
创先争优一句话承诺
2014/05/29 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
教师节获奖感言
2015/07/31 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript
用Java实现简单计算器功能
2021/07/21 Java/Android