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加入收藏夹功能(兼容IE、firefox、chrome)
May 05 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
Dec 03 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
Javascript农历与公历相互转换的简单实例
Oct 09 Javascript
判断横屏竖屏(三种)
Feb 13 Javascript
微信小程序中子页面向父页面传值实例详解
Mar 20 Javascript
vue教程之toast弹框全局调用示例详解
Aug 24 Javascript
jquery实现楼层滚动效果
Jan 01 jQuery
Vue路由history模式解决404问题的几种方法
Sep 29 Javascript
微信小程序开发(二):页面跳转并传参操作示例
Jun 01 Javascript
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
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
php 数组使用详解 推荐
2011/06/02 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
python中的字符串内部换行方法
2018/07/19 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
婚内房产协议书范本
2014/10/02 职场文书
写给老师的感谢信
2015/01/20 职场文书
教师工作证明范本
2015/06/12 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
2015小学师德工作总结
2015/07/21 职场文书
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫