socket在egg中的使用实例代码详解


Posted in Javascript onMay 30, 2019

config/config.default.js

exports.io = {
 init: {},
 namespace: {
  '/': {  //对应router.js里的 of('/')
  connectionMiddleware: [ 'auth' ], //对应io/middleware/auth
  packetMiddleware: [ 'filter' ],
  },
 },
 };

 config/plugin.js

exports.io = {
 enable: true,
 package: 'egg-socket.io',
};

 router.js

io.of('/').route('chat', io.controller.chat.index);
 io.of('/').route('message', io.controller.chat.message);
 io.of('/').route('user:online', io.controller.chat.online);

 app/io

app/io/middleware/auth.js

/**
 * Created by bear on 2018/2/12.
 */
const PREFIX = 'room'; //定义房间号

module.exports = app => {
 return async (ctx, next) => {
 const { app, socket, logger, helper } = ctx;
 const id = socket.id;
 const nsp = app.io.of('/');
 const query = socket.handshake.query;

 // 用户信息
 const { room, userId } = query; //获取socket链接传过来的参数
 const rooms = [ room ];

 console.log(room, userId);

 const tick = (id, msg) => {
  logger.debug('#tick', id, msg);
  // 踢出用户前发送消息
  socket.emit(id, helper.parseMsg('deny', msg));
  // 调用 adapter 方法踢出用户,客户端触发 disconnect 事件
  nsp.adapter.remoteDisconnect(id, true, err => {
  logger.error(err);
  });
 };
 // 检查房间是否存在,不存在则踢出用户
 // 备注:此处 app.redis 与插件无关,可用其他存储代替
 
 const hasRoom = await app.redis.get(`${PREFIX}:${room}`);
 console.log(hasRoom,`${PREFIX}:${room}`)

 // if (!hasRoom) {
 // tick(id, {
 //  type: 'deleted',
 //  message: 'deleted, room has been deleted.',
 // });
 // return;
 // }

 // 用户加入
 logger.debug('#join', room);
 socket.join(room);

 // 在线列表
 nsp.adapter.clients(rooms, (err, clients) => {
  // 更新在线用户列表
  nsp.to(room).emit('online', {
  clients,
  action: 'join',
  target: 'participator',
  message: `User(${id}) joined.`,
  });
  console.log(123,clients)
 });
 // socket.emit('connect', 'packet received!');
 
 await next();
 console.log('disconnect!');

 };
};

 app/io/middleware/filter.js

module.exports = (app) => {
 return async (ctx, next) => {
  // console.log(ctx.packet);
  await next();
  // console.log('packet response!');
 };
};

app/io/controller/chat.js

/**
 * Created by bear on 2018/2/12.
 */
module.exports = app => {
 class chatController extends app.Controller {
 async index() {
  this.ctx.socket.emit('res', 'test');
 }
 async message() { //方法通过 客户端 this.emit('message',{})//触发
  this.ctx.socket.emit('message', 'test');
  const params = this.ctx.args[0];
  // this.ctx.service.message.sendPeerMessage(params);
  console.log(2,params);
 }


 async online() {// modelMessage.sendOfflineMessage(socket, data.userId);
 }
 }
 return chatController;
};

总结

以上所述是小编给大家介绍的socket在egg中的使用实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Windows Live的@live.com域名注册漏洞 利用代码
Dec 27 Javascript
JavaScript监测ActiveX控件是否已经安装过的代码
Sep 02 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
如何使用Jquery获取Form表单中被选中的radio值
Aug 09 Javascript
JS 打印功能代码可实现打印预览、打印设置等
Oct 31 Javascript
jQuery蓝色风格滑动导航栏代码分享
Aug 19 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
Dec 29 Javascript
浅谈vue项目重构技术要点和总结
Jan 23 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
Apr 11 jQuery
JavaScript命名空间模式实例详解
Jun 20 Javascript
深入了解JavaScript 防抖和节流
Sep 12 Javascript
深入了解JavaScript 私有化
May 30 #Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 #jQuery
Vue CL3 配置路径别名详解
May 30 #Javascript
Vue CLI3中使用compass normalize的方法
May 30 #Javascript
通过实践编写优雅的JavaScript代码
May 30 #Javascript
AngularJs中$cookies简单用法分析
May 30 #Javascript
JS使用new操作符创建对象的方法分析
May 30 #Javascript
You might like
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
php session应用实例 登录验证
2009/03/16 PHP
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
使用Python生成url短链接的方法
2015/05/04 Python
python实现井字棋游戏
2020/03/30 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
pandas的qcut()方法详解
2019/07/06 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
python将时分秒转换成秒的实例
2019/12/07 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
好员工观后感
2015/06/17 职场文书
债务追讨律师函
2015/06/24 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python