推入一块新收到的数据,返回解析出的完整事件列表。 可能返回 0 个事件(数据不够完整) 可能返回 1 个事件(刚好凑齐一个) 可能返回多个事件(一块数据里包含了好几个事件) 对应源码: runtime/sse.rs:26-39 (push_chunk)
(self, chunk: str)
| 145 | self._retry = None # 当前事件的 retry |
| 146 | |
| 147 | def push_chunk(self, chunk: str) -> list[SseEvent]: |
| 148 | """ |
| 149 | 推入一块新收到的数据,返回解析出的完整事件列表。 |
| 150 | |
| 151 | 可能返回 0 个事件(数据不够完整) |
| 152 | 可能返回 1 个事件(刚好凑齐一个) |
| 153 | 可能返回多个事件(一块数据里包含了好几个事件) |
| 154 | |
| 155 | 对应源码: runtime/sse.rs:26-39 (push_chunk) |
| 156 | """ |
| 157 | self.buffer += chunk |
| 158 | events = [] |
| 159 | |
| 160 | # 逐行处理缓冲区 |
| 161 | while "\n" in self.buffer: |
| 162 | # 找到第一个换行符的位置 |
| 163 | index = self.buffer.index("\n") |
| 164 | # 提取这一行(不包含换行符) |
| 165 | line = self.buffer[:index] |
| 166 | # 从缓冲区移除已处理的部分(包含换行符) |
| 167 | self.buffer = self.buffer[index + 1:] |
| 168 | # 处理 \r\n 的情况(Windows 风格换行) |
| 169 | line = line.rstrip("\r") |
| 170 | # 处理这一行 |
| 171 | self._process_line(line, events) |
| 172 | |
| 173 | return events |
| 174 | |
| 175 | def finish(self) -> list[SseEvent]: |
| 176 | """ |
no test coverage detected