scottaubrey / simplensqclient
为NSQ实时分布式消息平台nsqd协议提供的简单库
0.2.0-alpha
2015-03-13 10:28 UTC
This package is auto-updated.
Last update: 2020-07-19 00:26:40 UTC
README
概述
这是一个用于NSQ实时分布式消息平台nsqd协议的PHP库。 simplensqclient
除了核心PHP发行版外没有其他依赖项,但需要PHP > 5.5。
simplensqclient
实现了NSQ平台功能的大部分,但并非全部。
"简单"指的是订阅处理。该库不遵循NSQ项目的客户端设计建议,更具体地说,它不使用任何类型的线程或异步IO事件循环来处理套接字和消息。
相反,simplensqclient使用异步循环处理集群连接,等待一个就绪。然后逐个处理每个消息,在返回循环等待更多就绪连接之前。
这确实带来了一个主要限制:如果您对每个消息进行大量密集处理,您将遇到吞吐量和消息超时的问题。
然而,对于短事件型消息处理,它应该可以正常工作,并且可以通过运行更多订阅客户端来实现更大的吞吐量。
当前为alpha状态。simplensqclient
没有实际的生产使用(据我所知)。
支持的NSQ协议功能 | 功能 | 支持 |
---|---|---|
PUB | 是 | |
SUB | 是 | 每个nsqd实例只能有1条消息在途 |
TLS | 是 | |
Deflate | 是 | 需要PHP编译时包含zlib,并且在任何已知发布的PHP中都不工作,除非修补zlib流包装器,请参阅PHP错误#48725 |
AUTH | 是 | |
重连退避 | 是 | |
发现 | 是 | |
消息退避 | 否 | 可能不需要,因为客户端目前从未达到退避。 |
Snappy | 否 | PHP中没有流包装器支持 |
抽样 | 否 |
入门指南
使用composer require命令将scottaubrey/simplensqclient添加到composer中
composer.phar require "scottaubrey/simplensqclient"
然后您可以向nsqd发布消息
//create an NSQ instance with default hostname and port
$nsq = new NsqConnection;
//publish a simple string message
$nsq->publish("TestTopic", "My Message");
并订阅单个nsqd(每次一条消息)
//create an NSQ instance with default hostname and port
$nsq = new NsqConnection;
//publish a simple string message
foreach ($nsq->subscribe("TestTopic", "MyTestChannel") as $messageId => $message) {
$nsq->finish($messageId);
}
在examples
目录中还有其他示例
路线图
这些是在1.0之前要完成的任务
- 连接选项 - 尤其是可以配置消息超时和心跳间隔。
- 整理API,Doc blocks
- 发布策略 - 目前只支持轮询发布。
将来尝试的事情
- 调查对PCNTL和/或pthreads的支持(https://github.com/krakjoe/pthreads) - 使用一个线程读取连接,在另一个进程/线程中处理消息。
- 消息去重 - NSQPHP(https://github.com/davegardnerisme/nsqphp)在基本库之上提供了一个基于布隆过滤器的去重层。
许可证
此库根据开源MIT许可证授权,许可证文本包含在根目录中。