Bolt 协议服务器状态规范
对于服务器而言,每个使用 Bolt 协议的连接在其生命周期内都会处于几种状态之一。
此状态用于确定客户端可以执行的操作。每个服务器状态规范都对应一个相同版本的消息规范。
有关 Bolt 协议各版本中所有可用服务器状态转换的摘要,请参阅附录页面。
服务器状态
Bolt 服务器维护的每个连接在其生命周期内都会处于几种状态之一。此状态用于确定客户端可以执行的操作。
| 状态 | 逻辑状态 | 描述 |
|---|---|---|
X |
无套接字连接 |
|
X |
套接字连接已永久关闭 |
|
协议握手已成功完成;准备接收 |
||
已接受 |
||
准备接收 |
||
自动提交事务,服务器有结果可供流式传输 |
||
显式事务,准备接收 |
||
显式事务,服务器有结果可供流式传输 |
||
连接处于暂时不可用状态 |
||
服务器收到 |
服务器状态 NEGOTIATION
在建立了新的协议连接且握手成功完成后,服务器进入 NEGOTIATION 状态。连接尚未经过身份验证,且仅允许通过 HELLO 消息进行成功初始化,从而进入 AUTHENTICATION 状态。
服务器状态 DEFUNCT
这严格来说不是一种连接状态,而是一种在连接关闭后存在的逻辑状态。当处于 DEFUNCT 状态时,连接永久不可用。这可能是由于正常关闭引起的,也可能发生在不可恢复的错误或协议违规之后。客户端和服务器在进入此状态时应清理与连接相关的所有资源,包括关闭所有打开的套接字。这是一个终端状态,无法进行任何进一步的转换。<DISCONNECT> 信号会将连接置于 DEFUNCT 服务器状态。
服务器状态 STREAMING
当处于 STREAMING 状态时,服务器有结果可供流式传输给客户端。客户端必须完全消耗或丢弃此结果,服务器才能重新进入 READY 状态并允许执行后续查询。
从 STREAMING 转换
-
<INTERRUPT>转至INTERRUPTED -
<DISCONNECT>转至DEFUNCT -
PULL转至READY,FAILED, 或STREAMING -
DISCARD转至READY,FAILED, 或STREAMING
在 v1, v2 和 v3 版本中,可以进行以下转换
-
<INTERRUPT>转至INTERRUPTED -
<DISCONNECT>转至DEFUNCT -
PULL_ALL转至READY或FAILED -
DISCARD_ALL转至READY或FAILED
| 状态 | 新状态 | 响应 |
|---|---|---|
|
|
|
|
|
|
|
|
|
| 状态 | 新状态 | 响应 |
|---|---|---|
|
|
[ |
|
|
[ |
|
|
[ |
| 状态 | 新状态 | 响应 |
|---|---|---|
|
|
`SUCCESS {} |
|
|
|
| 状态 | 新状态 | 响应 |
|---|---|---|
|
|
[ |
|
|
[ |
服务器状态 TX_READY
从 TX_READY 转换
-
<INTERRUPT>转至INTERRUPTED -
<DISCONNECT>转至DEFUNCT -
RUN转至TX_STREAMING或FAILED -
COMMIT转至READY或FAILED -
ROLLBACK转至READY或FAILED
| 状态 | 新状态 | 响应 |
|---|---|---|
|
|
|
|
|
|
|
|
服务器状态 TX_STREAMING
当处于 TX_STREAMING 状态时,服务器有结果可供流式传输给客户端。客户端必须完全消耗或丢弃此结果,服务器才能转换为 TX_READY 状态。
从 TX_STREAMING 转换
-
<INTERRUPT>转至INTERRUPTED -
<DISCONNECT>转至DEFUNCT -
RUN转至TX_STREAMING或FAILED -
PULL转至TX_READY,FAILED或TX_STREAMING -
DISCARD转至TX_READY,FAILED或TX_STREAMING
| 状态 | 新状态 | 响应 |
|---|---|---|
|
|
|
|
|
|
| 状态 | 新状态 | 响应 |
|---|---|---|
|
|
|
|
|
|
|
|
|
| 状态 | 新状态 | 响应 |
|---|---|---|
|
|
[ |
|
|
[ |
|
|
[ |
|
|
服务器状态 INTERRUPTED
此状态出现在服务器接收到跳转 <INTERRUPT> 和排队的 RESET 消息之间(RESET 消息会触发 <INTERRUPT>)。当服务器处于 INTERRUPTED 状态时,大多数传入消息都会被忽略,但允许转换回 READY 的 RESET 除外。<INTERRUPT> 信号会将连接置于 INTERRUPTED 服务器状态。
从 INTERRUPTED 转换
-
<INTERRUPT>转至INTERRUPTED -
<DISCONNECT>转至DEFUNCT -
RUN转至INTERRUPTED -
DISCARD转至INTERRUPTED -
PULL转至INTERRUPTED -
BEGIN转至INTERRUPTED -
COMMIT转至INTERRUPTED -
ROLLBACK转至INTERRUPTED -
RESET转至READY或DEFUNCT
在 v1 和 v2 中,可以进行以下转换
-
<INTERRUPT>转至INTERRUPTED -
<DISCONNECT>转至DEFUNCT -
RUN转至INTERRUPTED -
DISCARD_ALL转至INTERRUPTED -
PULL_ALL转至INTERRUPTED -
ACK_FAILURE转至INTERRUPTED -
RESET转至READY或DEFUNCT
各版本变更摘要
以下各节列出了与上一版本相比的变更。
版本 5.1
-
CONNECTED状态已重命名为NEGOTIATION,但仍接受HELLO消息。 -
HELLO消息不再接受身份验证,并从NEGOTIATION转换为AUTHENTICATION状态。 -
添加了
LOGON消息。它只能在AUTHENTICATION状态下接收,并转换为READY状态。 -
添加了
LOGOFF消息。它只能在READY状态下接收,并转换为AUTHENTICATION状态。
版本 4.0
与版本 3 相比,RUN, PULL 和 DISCARD 现在可以重新进入 STREAMING 或 TX_STREAMING。服务器状态转换使用 Bolt 协议消息规范版本 4.0 中定义的更新后的消息集。
版本 3
与版本 2 相比,有新的服务器状态:
-
TX_READY(事务就绪) -
TX_STREAMING这些状态是为了处理显式事务的概念而引入的。服务器状态转换使用 Bolt 协议消息规范版本 3 中定义的更新后的消息集。