这里的阻塞任务主要指io,看了官方文档,walkor老大的意思是多设置点进程,但是感觉和协程比起来还是差点意思,又在问答里搜了很多,也有人说放在队列用业务进程来执行,但这样会产生个问题,就是如何给客户端通知呢?
链接进程肯定是将任务放在队列(我用redis~)然后直接返回客户端的,然后处理队列中任务的进程如何给那个客户端通知呢?我想了很久,想到的结果:
1、客户端轮询,效率也是很低的。。
2、客户端和服务端新发起websocket或socket-io之类的新链接等待服务器返回结果,但如何实现和进程间通知任务结果呢?这样的效率又如何呢?
谢谢各位大神来帮忙答疑解惑~
慢任务建议用消息队列处理,然后利用webman/push给客户端推送。
嗯,我的思路就是:
1、客户端访问webman服务,webman服务生成一个任务key返回给客户端,并放入redis;
2、客户端用这个key长链接(使用websocket或sse)另一个workerman长链接进程,workerman把key传给另外一些业务worker运行;
3、业务worker运行完毕后,通过tcp把结果传给workerman长连接进程,然后workerman长连接进程再返回给客户端,关闭链接;
不知这样做对不对,或者老大有更好的方案吗?谢谢~
如果不使用队列,可以通过开一组新的http端口来处理慢业务
https://www.workerman.net/doc/webman/others/task.html#%E6%96%B0%E5%A2%9EHTTP%E7%AB%AF%E5%8F%A3
谢谢老大,我再好好研究研究~