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 相关文章推荐
jQuery select的操作实现代码
May 06 Javascript
JQuery 学习笔记 选择器之一
Jul 23 Javascript
Javascript var变量隐式声明方法
Oct 19 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
Aug 14 Javascript
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 Javascript
旺旺在线客服代码 旺旺客服代码生成器
Jan 09 Javascript
详解如何使用webpack打包多页jquery项目
Feb 01 jQuery
微信小程序实现渐入渐出动画效果
Jun 13 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
Sep 10 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
Apr 27 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
PHP中GET变量的使用
2006/10/09 PHP
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
如何在PHP中使用数组
2020/06/09 PHP
js对象的比较
2011/02/26 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
13个PHP函数超实用
2015/10/21 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
Python数据类型之List列表实例详解
2019/05/08 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
python求解汉诺塔游戏
2020/07/09 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
春节请假条
2014/04/11 职场文书
导师工作推荐信
2015/03/27 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏