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动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
Apr 26 Javascript
谈谈target=_new和_blank的不同之处
Oct 25 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
vue父子组件的数据传递示例
Mar 07 Javascript
jQuery实现jQuery-form.js实现异步上传文件
Apr 28 jQuery
Vue.js实现价格计算器功能
Mar 30 Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 Javascript
前端面试知识点目录一览
Apr 15 Javascript
JS实现放大镜效果
Sep 21 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 Javascript
js+html+css实现手动轮播和自动轮播
Dec 30 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
人族 Terran 基本策略
2020/03/14 星际争霸
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
jquery选择器简述
2015/08/31 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
javascript的this关键字详解
2019/05/20 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
如何写python的配置文件
2020/06/07 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
C语言编程练习
2012/04/02 面试题
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
幼儿教师国培感言
2014/02/19 职场文书
慰问信范文
2015/02/14 职场文书
MySQL批量更新不同表中的数据
2022/05/11 MySQL