PHPackages                             huangzonglong/pubsub - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. huangzonglong/pubsub

ActiveLibrary

huangzonglong/pubsub
====================

v1.0.10(6y ago)227PHPPHP &gt;=5.5.0

Since Jun 4Pushed 6y agoCompare

[ Source](https://github.com/huangzonglong/pubsub)[ Packagist](https://packagist.org/packages/huangzonglong/pubsub)[ RSS](/packages/huangzonglong-pubsub/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (10)Dependencies (2)Versions (12)Used By (0)

PHP实现的grpc客户端
=============

[](#php实现的grpc客户端)

一、安装
----

[](#一安装)

composer安装依赖包

```
composer install huangzonglong/pubsub
```

安装php的grpc扩展：

```
pecl install grpc
```

二、demo运行
--------

[](#二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
-------

[](#四topic)

1、topic格式说明

topic是字符串，分成固定的四个层级，每个层级用竖线分隔表示，

如：feeFood|position|update|google，feeFood|position|update|baidu，qqty|chat|say|roomID

，描述为： 项目|服务|方法|可扩展参数

2、订阅时，可以是写全topic，也可以将可变参数改成+号，比如，qqty|chat|say|+，这样就可以订阅到所有房间的聊天

3、发布时，一定要写全topic

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

11

Last Release

2530d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/61d531b5cad7d75ffd5309dbe5e1516d587271d3bdb5477ffbe41e972db905d3?d=identicon)[huangzonglong](/maintainers/huangzonglong)

---

Top Contributors

[![huangzonglong](https://avatars.githubusercontent.com/u/17433678?v=4)](https://github.com/huangzonglong "huangzonglong (20 commits)")

### Embed Badge

![Health badge](/badges/huangzonglong-pubsub/health.svg)

```
[![Health](https://phpackages.com/badges/huangzonglong-pubsub/health.svg)](https://phpackages.com/packages/huangzonglong-pubsub)
```

###  Alternatives

[google/gax

Google API Core for PHP

263103.1M452](/packages/google-gax)[google/grpc-gcp

gRPC GCP library for channel management

18497.8M3](/packages/google-grpc-gcp)[googleads/google-ads-php

Google Ads API client for PHP

3497.6M9](/packages/googleads-google-ads-php)[temporal/sdk

Temporal SDK

4002.2M18](/packages/temporal-sdk)[google/common-protos

Google API Common Protos for PHP

173103.7M49](/packages/google-common-protos)[flow-php/flow

PHP ETL - Extract Transform Load - Data processing framework

81733.7k](/packages/flow-php-flow)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
