第一次翻译,文中会有一些原文专业术语,多多见谅,多多指正。

=Beanstalk 协议=

Beanstalk协议是 使用ASCII编码方式 运行在tcp之上的。整个协议是由客户端主动发起tcp连接,发送命令和数据,等待响应,然后关闭连接来进行通信的。对于每一个连接,服务严格按照请求顺序处理每个请求,发送返回状态的时候也是相同的顺序。在协议中的所有整数都是十进制(除非特说说明)和非负的。

变量(或者是名字):在协议中,变量是ASCII字符串。可能包含字母(A-Z 和 a-z),数字(0-9),字符(- + / ; . $ _ ( )).但是不能以-开始。以空格为结束符(可是是空格或者是回车还行符).每一个变量至少包含一个字母。

 

协议包含两种数据:命令行和非结构化的数据块。命令行用做客户端命令或者是服务端的响应。数据块用来传输任务体和状态信息。每一个任务体都是都是字节序列。服务不会审查和修改任务体,按照原始格式返回信息给客户端。是由客户端来决定任务体的实际意义。

当客户端不需要使用服务的时候,客户端将发出 quit 命令或者是自动关闭TCP连接。但是beanstalkd 可以胜任很大的socket并发连接,所以推荐客户端不要关闭连接,尽量的使用socket连接通道。这样也避免了建立TCP连接的开销。

 

如果客户端违反了协议(例如:发送格式不对或者命令不存在)或者服务有问题,服务将返回下列错误信息中的一个:

- "OUT_OF_MEMORY\r\n" 服务没有足够的内存。客户端可以一会重试。

- "INTERNAL_ERROR\r\n" 服务有错误。应该永远不会发生,如果发生了,清在http://groups.google.com/group/beanstalk-talk.提交。
 


- "BAD_FORMAT\r\n" 客户端发送协议格式有问题。例如:命令行没有以\r\n结尾。命令行下一个变量不是 期望中的数字。错误的参数个数等等。

- "UNKNOWN_COMMAND\r\n" 客户端发送无效的命令。

 

以上的错误的返回值不会列在下面单独命令的文档中,但是将会是所有命令的可能返回值。客户端需要正确的处理他们。

作为最后的方法:如果服务有严重的错误,使得不能处理客户端请求。服务将会关闭和客户端的连接。