老师你好,我想提几个问题
来源:12-6 实现ReadLine

慕瓜9063200
2022-07-21
在resp协议解析器有个parse0()函数
- bufReader := bufio.NewReader(reader)这里bufReader里面读到的就是用户发过来的完整指令*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n对吗?
- 那既然是读取了完整的用户指令,为什么不能在for循环解析指令之前包装好用户的指令,再给解析器解析呢,直接让用户发送set ket value不可以吗
- for循环中msg, ioErr, err = readLine(bufReader, &state),msg中就是以\r\n切分的数据,例如第一次循环得到的msg就是*3\r\n,第二次就是$3\r\n,是这样的吧
写回答
1回答
-
Moody
2022-07-21
1 由于网络传输的问题,有可能先收到了半条指令,很长时间之后又收到半条,而且间断的地方也不确定的。这个bufReader就是作为缓冲。
2 RESP协议就是Redis规定好的,我们只能实现他,不能直接让用户发送set ket value,因为现实中的Redis客户端也不会直接发没有编码的指令。
3 对
00