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 相关文章推荐
编辑浪子版表单验证类
May 12 Javascript
爆炸式的JS圆形浮动菜单特效代码
Mar 03 Javascript
JS 遮照层实现代码
Mar 31 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
Angular 如何使用第三方库的方法
Apr 18 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 jQuery
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
Aug 03 Javascript
vue-router的钩子函数用法实例分析
Oct 26 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
Aug 14 Javascript
vue vant中picker组件的使用
Nov 03 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
javascript动态加载二
2012/08/22 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
vue的for循环使用方法
2019/02/12 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
Python检测网站链接是否已存在
2016/04/07 Python
Python SQLite3简介
2018/02/22 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
python word转pdf代码实例
2019/08/16 Python
python实现飞行棋游戏
2020/02/05 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
节约电力资源的建议书
2014/03/12 职场文书
报关报检委托书
2014/04/08 职场文书
2014年教学工作总结
2014/11/13 职场文书
婚育证明样本
2015/06/16 职场文书
红色影片观后感
2015/06/18 职场文书
法律服务所工作总结
2015/08/10 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
Python中json.dumps()函数的使用解析
2021/05/17 Python
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏