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 相关文章推荐
javascript 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
javascript操作excel生成报表示例
May 08 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
JavaScript修改浏览器tab标题小技巧
Jan 06 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
javascript禁止超链接跳转的方法
Feb 02 Javascript
基于ionic实现下拉刷新功能
May 10 Javascript
三种Webpack打包方式(小结)
Sep 19 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
Sep 19 Javascript
Vue函数式组件的应用实例详解
Aug 30 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
php上的memcache和memcached两个pecl库
2010/03/29 PHP
Joomla开启SEF的方法
2016/05/04 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
js的event详解。
2006/09/06 Javascript
javascript第一课
2007/02/27 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
jQuery实现滚动效果
2017/11/17 jQuery
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
Django学习教程之静态文件的调用详解
2018/05/08 Python
python实现反转部分单向链表
2018/09/27 Python
Python理解递归的方法总结
2019/01/28 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
利用python汇总统计多张Excel
2020/09/22 Python
python实现网页录音效果
2020/10/26 Python
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
求职简历推荐信范文
2013/12/02 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
客户付款通知书
2015/04/23 职场文书
培训班通知
2015/04/25 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
学校学期工作总结
2015/08/13 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript