本文目录一览:
利用php +swoole如何实现异步任务队列
class msgServer
{
private $serv;
function __construct()
{
$this-serv = new Swoole\Server("127.0.0.1", 9501);//创建一个服务
$this-serv-set(array('task_worker_num' = 4)); //配置task进程的数量
$this-serv-on('receive', array($this, 'onReceive'));//有数据进来的时候执行
$this-serv-on('task', array($this, 'onTask'));//有任务的时候执行
$this-serv-on('finish', array($this, 'onFinish'));//任务结束时执行
$this-serv-start();
}
public function onReceive($serv, $fd, $from_id, $data)
{
$data = json_decode($data, true);
$task_id = $serv-task($data);//这里发起了任务,于是上面的on('task', array($this, 'onTask'))就会执行
}
public function onTask($serv, $task_id, $from_id, $data)
{
$data['send_res'] = $this-sendMsg($data); //发送短信
//1.7.3之前,是$serv-finish("result");
return "result.";//这里告诉任务结束,于是上面的on('finish', array($this, 'onFinish'))就会执行
}
public function onFinish($serv, $task_id, $data)
{
$this-addSendLog($data); //添加短信发送记录
}
}
请教php的laravel怎么整合swoole实现rpc呢?
安装swoole扩展
composer安装laravel
composer安装swooletw插件
laravel中添加swoole服务
composer安装thrift rpc依赖包
创建一个service实现thrift接口
新建sockets目录,创建服务端代理类
创建传输层
编写swoole的rpc服务器类
10.客户端编写测试用例即可。
php为什么要用swoole
Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无二的可能性。Swoole 可以广泛应用于互联网、移动通信、云计算、 网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
使用Swoole+PHP开发的IM
(一)扩展安装
本demo需要的扩展有Swoole、MongoDB、Redis
(二)详细步骤
1、Client在进行长连接操作时会在链接后面跟上用户id,Server在接受到用户id后会将此id与线程id进行绑定,并存入Redis中。
2、Client触发send事件后,会将此消息追加到本地的消息列表中(此时为消息的发送方)。Server在触发onMessage事件后首先会将消息内容存入DB,然后再根据此消息接收者的用户id找到对应的线程id并进行push操作。
3、Client触发onmessage事件后会拿到消息内容并将此内容追加到本地消息列表中。(此时为消息的接收方)
至此,IM的流程就大致梳理完了。
效果图如下:
项目源码:
体验地址: