huangzonglong / pubsub
There is no license information available for the latest version (v1.0.10) of this package.
v1.0.10
2019-06-06 02:44 UTC
Requires
- php: >=5.5.0
- google/protobuf: ^3.8
- grpc/grpc: ^1.19
README
一、安装
composer安装依赖包
composer install huangzonglong/pubsub
安装php的grpc扩展:http://pecl.php.net/package/gRPC
pecl install grpc
二、demo运行
tests目录中有测试文件test.php可以直接运行,前提是先启动服务端
三、代码指引
文件结构 是通过proto自动自动生成的,主要关注的是src下一级的PHP文件,其中PubSubClient是调用服务的php客户端实现。其他的每个文件对应于proto协议文件定义的服务方法和消息类型的实现类。
1、引入自动加载文件,Pubsub\PubSubClient类继承了grpc类,实现了连接grpc服务端,返回一个客户端连接对象。
include_once "./vendor/autoload.php"; $client = new Pubsub\PubSubClient('localhost:9900', [ 'credentials' => Grpc\ChannelCredentials::createInsecure(), ]);
2、接下来,在使用$client调用服务前,需要填充所需的参数,参数都是通过不同的对象去设置,根据proto文件,可以知道那个参数属于哪个对象。
$Identity = new \Pubsub\Identity(); $Identity->setClientId($clientId); $Subscription= new \Pubsub\Subscription(); $Subscription->setTopic($topic); $SubscribeRequest = new \Pubsub\SubscribeRequest(); $SubscribeRequest->setSubscription($Subscription); $SubscribeRequest->setIdentity($Identity);
调用服务订阅服务,然后调用pull服务监听topic消息(订阅)
list($sub, $status) = $client->Subscribe($SubscribeRequest)->wait(); if($status->code == 0){ $responses = $client->Pull($Identity)->responses(); foreach ($responses as $pull) { var_dump($pull->getTopic()); } }
3、消息发布,同样,在调用服务前,要填充所需参数
//发布测试 $msgArr = ["内容1","内容2"]; $message = []; foreach($msgArr as $v){ $message[] = (new \Pubsub\Message())->setTopic($topic)->setPayload($v); } $public = new \Pubsub\PublishRequest(); $public->setMessages($message); $public->setTopic($topic); list($respone, $status) = $client->Publish($public)->wait();
四、Topic
1、topic格式说明
topic是字符串,分成固定的四个层级,每个层级用竖线分隔表示,
如:feeFood|position|update|google,feeFood|position|update|baidu,qqty|chat|say|roomID
,描述为: 项目|服务|方法|可扩展参数
2、订阅时,可以是写全topic,也可以将可变参数改成+号,比如,qqty|chat|say|+,这样就可以订阅到所有房间的聊天
3、发布时,一定要写全topic