请问我想在定时任务里面写 socket定时执行,但是是未定义function,谢谢了

module.exports = {
schedule: {
interval: '1m', // 1 分钟间隔
type: 'all', // 指定所有的 worker 都需要执行
},
async task(ctx) {
const { app } = ctx;
const nsp = app.io.of('/');
nsp.emit('hello', 'world');
},
};
截图的用法逻辑上不对。
socket 是一个相对概念,是相对于特定 client 的。在定时任务里面的 ctx 是匿名的,并不是任何客户端的指代,这里去调用 socket 没有意义。
楼上的代码,可以获得 io 对象对应的 namespace ,来做特定需求。
这个需求,可以考虑通过外部服务,比如 redis 来中转达到。
最根本的,还是这个需求的逻辑本身比较奇怪。
我没这需求,代码是给一楼演示一下如何在定时任务里调用 io 发送消息~
@ngot
我遇到一个问题是这样:
通过 nsp.adpter.clients() 获取客户端时,
如果 client 接近同时(5ms)连接到 io , 每个 client 都只能获取到一个在线用户。
请问下这种情况该怎么处理呢?
@thonatos 我没遇到过这个。这个到 socket.io 那边提issue吧。
主要是以php做的系统,sokect.io做推送,所以才会做定时任务.我跑定时任务从数据库拿出来数据,推送给某个人 .希望能给一个好的想法,谢谢了 @thonatos @ngot
这个要分情况讨论:
如果是,不从部署架构上确保单机单进程,那么对于这个问题,需要一个分布式的定时器,并且需要有一个调度系统来获取所有的socket的对象,或者做一个单独的消息下发系统。
这个不是一个插件能够解决的问题,需要从系统架构上去设计。
@ngot 这里缺一篇 socket.io 文档~~

@thonatos 欢迎 PR 文档
明白了,多谢了 @thonatos @ngot
@atian25
好的,我研究一下怎么写...
egg,参考我最新写的那个 passport 文档
发自我的 iPhone
在 2017年12月15日,15:05,Suyi notifications@github.com 写道:
@atian25
文档是 PR 到哪个项目呢
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
Most helpful comment
这个要分情况讨论:
如果是,不从部署架构上确保单机单进程,那么对于这个问题,需要一个分布式的定时器,并且需要有一个调度系统来获取所有的socket的对象,或者做一个单独的消息下发系统。
这个不是一个插件能够解决的问题,需要从系统架构上去设计。