我正在尝试实现我自己的 beanstalkd 客户端作为一种学习方式。https://github.com/kr/beanstalkd/blob/master/doc/protocol.txt目前,我正在bufio读取由 . 分隔的一行数据\n。res, err := this.reader.ReadLine('\n')当我发送单个命令并读取单行响应时,这很好:INSERTED %d\r\n但是当我尝试保留作业时发现困难,因为作业正文可能是多行,因此,我不能使用\n分隔符。有没有办法读入缓冲区直到CRLF?例如,当我发送reserve命令时。我的预期反应如下:RESERVED <id> <bytes>\r\n<data>\r\n但数据可能包含\n,所以我需要阅读直到\r\n.<bytes>或者 - 有没有一种方法可以读取上面示例响应中指定的特定字节数?目前,我已经(删除了错误处理):func (this *Bean) receiveLine() (string, error) { res, err := this.reader.ReadString('\n') return res, err}func (this *Bean) receiveBody(numBytesToRead int) ([]byte, error) { res, err := this.reader.ReadString('\r\n') // What to do here to read to CRLF / up to number of expected bytes? return res, err}func (this *Bean) Reserve() (*Job, error) { this.send("reserve\r\n") res, err := this.receiveLine() var jobId uint64 var bodylen int _, err = fmt.Sscanf(res, "RESERVED %d %d\r\n", &jobId, &bodylen) body, err := this.receiveBody(bodylen) job := new(Job) job.Id = jobId job.Body = body return job, nil}
目前暂无任何回答
- 0 回答
- 0 关注
- 483 浏览
添加回答
举报
0/150
提交
取消