ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# PheanstalkInterface 这是一个连接实例的接口。 它定义了一个 beanstalkd 连接必须拥有的方法。 ## 常量: |常量|描述| |---|---| | *DEFAULT_PORT = 11300*| 默认连接端口号 | | *DEFAULT_DELAY = 0* | 默认延迟秒数,0 为不延迟 | | *DEFAULT_PRIORITY = 1024*| 默认优先级,0 为最高优先级 | | *DEFAULT_TTR = 60* | 默认 TTR 60秒 | |*DEFAULT_TUBE = 'default'*| 默认 tube | ## 方法 |方法|用途| |---|---| |bury|put 一个 buried job ,只有在 kick 后才能被 reserve | | delete | 永久删除一个 job | | ignore | 从 watchlist 中移除一个 tube | | kick | 移动指定数量的 buried 或 delayed job 到 ready 对列中,有buried 会先处理 buried | | kickJob | 将单个 job 移动到 ready 队列中,移动后仍处于该 tube | | listTubes | 当前 server 的所有 tube | | listTubesWatched | 查看当前 watchlist,可通过传入 true 还是 false ,来要求是从服务器获取,还是从缓存获取 | | listTubeUsed | 当前 use 的 tube ,传入 true , 则从服务器请求,传入 false ,则使用上一次的结果(缓存)| | pauseTube | 暂时不让 tube 内的 job 被 reserve | | resumeTube | 恢复被暂停的 Tube | | peek | 查看一个 job ,不论它处于什么 tube | | peekReady | 查看 ready 队列中下一个可被 reserve 的 job (当前 tube 中) | | peekDelayed | 查看 delayed 队列中下一个即将进入 ready 的 job (当前 tube 中) | | peekBuried | 查看下一个 buried job (当前 job 中) | put | 放入一个 job | | release | 把一个 reserved job 重新放回 ready 队列 | | reserve | 从当前 watchlist 中锁定一个 job (接收一个 job)| | reserveWithTimeout | 有超时时间的 reserve | | statsJob | 查看一个 job 的统计信息 | | statsTube | 查看一个 tube 的统计信息 | | stats | 查看 server 的统计信息 | | touch | 为 job 延长一次 ttr | | useTube | use 一个 tube ,用于接着 put job | | watch | 把一个 tube 加入到 watchlist | | watchOnly | 往 watchlist 中加入一个 tube ,并 ignore 其他所有 tube # JobIdInterface ## 方法 |方法|描述| |---|---| | getId | 获得 Job 的 id | # CommandInterface pheanstalk 的设计中,每个 beanstalkd 命令都以一个类的形式呈现,想要向 beanstalkd server 发送命令,需要通过实例化各 command 类来实现。 CommandInterface 接口,是所有 command 类最抽象的形态,我们观察 pheanstalk 的源码,可以发现,AbstractCommand 抽象类实现了这个接口。 而 AbstractCommand 又会被 TubeCommand 、JobCommand 类继承,再往下,还会有具体的命令 command 类继承 Tube 和 Job command 类。 > 由此,我们也可以看出 pheanstalk 在代码设计上的思路:从 CommandInterface ,到 AbstractCommand ,再到 TubeCommand、JobCommand , 再到具体的命令 command ,它们便是一个典型的从抽象到具体的过程。 **在此,我们可以再回去看看 beanstalkd 的协议,熟悉各种命令和用途,结合 pheanstalk 对 command 的封装过程,以提升我们在面向对象上的设计能力。** 要求每一个 command 类都必须实现以下几个方法,且拥有以下几个常量。 ## 常量 CommandInterface 的常量格式为 COMMAND_* ,如 COMMAND_PUT 、 COMMAND_USE 。 它分别定义了一系列 beanstalkd 的命令。 **之所以把 put 、 use 等命令,以常量的形式存储,是为了将「具体命令」和「具体业务逻辑」剥离,并将「具体命令」放在最高级抽象的接口中。** 这样,如果 beanstalkd 更新后更改了某些命令,如,将 put 改成 put1 ,我们的 pheanstalk 只需要更新 CommandInterface 即可,而其它「相对具体」的代码中,使用的是 CommandInterface 的常量,不会受到影响。 这是利用接口解耦的思路。 而这里的常量,一般用于组装要发送到 beanstalkd server 的命令行字符串。 ## 方法 |方法|描述| |---|---| | getCommandLine | 获取当前命令行的字符串形式,会返回即将发送给 beanstalkd server 的命令行字符串形式,但不包括 CRLF ,即 \r\n | | hasData | 此命令是否存在 data | | getData | 返回此命令的 data 数据 | | getDataLength| 返回此命令 data 的 bytes | | getResponseParser | 返回 ResponseParser 实例 | # ResponseInterface 这个接口,定义了一个 beanstalkd 返回实例该有的常量和方法。 ## 常量 此接口下的所有常量,都以 RESPONSE_ 作为前缀,分别定义了 beanstalkd 可能返回的响应前缀,即响应中大写的那一部分。(可以回头参考下 beanstalkd 的协议) 这里的常量,也是用于组装 beantalkd 返回的命令行字符串。 ## 方法 |方法|描述| |---|---| | getResponseName | 获取 response 的名字,一般指此 response 是哪个命令的 | # ResponseParserInterface ## 方法 | 方法 | 描述 | |---|---| | parseResponse | 将 beanstalkd 返回的命令行字符串,解析为 Response Object | # SocketFactoryInterface ## 方法 | 方法 | 描述 | |---|---| | create | 返回一个 socket 连接 | # SocketInterface 此接口定义了 Socket 类所必须存在的操作,Socket 类主要处理和 beastalkd 通信相关事项。 ## 方法 | 方法 | 描述 | |---|---| | write | 向 socket 写入数据 | | read | 从 socket 读取指定字节量的数据 | | getLine | 获取下一行 | | disconnect | 关闭 socket 连接 |