diff --git a/.github/images/server-gdi.svg b/.github/images/server-gdi.svg index f07fe67..3dc2a3e 100644 --- a/.github/images/server-gdi.svg +++ b/.github/images/server-gdi.svg @@ -1 +1 @@ -title%20This%20is%20a%20title%0A%0Aparticipantspacing%20equal%0A%23participantspacing%20gives%20manual%20control%20of%20spacing%20between%20participants%2C%20equal%3A%20equal%20distance%20between%20all%20participants%2C%20number%20i.e.%2020.5%3A%20minimum%20space%0A%0Aactor%20Client%23lightgreen%0A%23supported%20participant%20types%3A%20participant%2C%20actor%2C%20boundary%2C%20control%2C%20entity%2C%20database%0A%0Aparticipantgroup%20%23lightgreen%20Minotaur%20Server%0Aparticipant%20Server%0Aparticipant%20Shunt%0Aabox%20left%20of%20Shunt%3A%20System%20%E6%B6%88%E6%81%AF%E5%B0%86%E5%85%A8%E5%B1%80%E5%8D%95%E7%BA%BF%E7%A8%8B%E6%89%A7%E8%A1%8C%EF%BC%8CShunt%20%E6%B6%88%E6%81%AF%E5%B0%86%E4%BC%9A%5Cn%E5%9C%A8%E8%BF%9E%E6%8E%A5%E5%BD%93%E5%89%8D%E6%89%80%E5%9C%A8%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%E5%86%85%E6%89%A7%E8%A1%8C%E3%80%82%E7%9B%B8%E5%90%8C%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%E7%9A%84%5Cn%E6%B6%88%E6%81%AF%E5%B0%86%E4%B8%B2%E8%A1%8C%E5%A4%84%E7%90%86%EF%BC%8C%E4%B8%8D%E5%90%8C%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%E6%B6%88%E6%81%AF%E5%B9%B6%E8%A1%8C%E5%A4%84%E7%90%86%E3%80%82%5Cn%5Cn%E8%BF%9E%E6%8E%A5%E5%8F%AF%E6%A0%B9%E6%8D%AE%E4%B8%9A%E5%8A%A1%E5%9C%BA%E6%99%AF%E7%81%B5%E6%B4%BB%E7%9A%84%E9%80%9A%E8%BF%87%20srv.UseShunt%20%E6%9D%A5%5Cn%E5%88%87%E6%8D%A2%E5%BD%93%E5%89%8D%E6%89%80%E5%A4%84%E7%9A%84%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%0Aabox%20left%20of%20Shunt%3A%20%E5%BC%82%E6%AD%A5%E6%B6%88%E6%81%AF%5Cn%5Cn(SystemMessage)%20srv.PushAsyncMessage%5Cn(ShuntMessage)%20srv.PushShuntAsyncMessage%5Cn(SystemMessage)%20srv.PushUniqueAsyncMessage%5Cn(ShuntMessage)%20srv.PushUniqueShuntAsyncMessage%5Cn%5Cn%20Unique%20%E6%B6%88%E6%81%AF%E5%B0%86%E4%BC%9A%E5%9C%A8%E4%B8%8A%E4%B8%80%E4%B8%AA%E7%9B%B8%E5%90%8C%E6%B6%88%E6%81%AF%E6%9C%AA%E6%89%A7%E8%A1%8C%E5%AE%8C%E6%AF%95%5Cn%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%BF%BD%E7%95%A5%E5%90%8E%E7%BB%AD%E6%B6%88%E6%81%AF%0Aend%0A%0AClient-%3EServer%3A%E9%80%9A%E8%BF%87%20WebSocket%E3%80%81TCP%E3%80%81UDP%E3%80%81KCP%20%E7%AD%89%E5%8D%8F%E8%AE%AE%E4%B8%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5%0Aloop%20Write%20Loop%0AServer%20-%3EClient%3A%E5%86%99%E5%85%A5%E6%95%B0%E6%8D%AE%E5%8C%85%0Aabox%20left%20of%20Server%3A%20%E6%95%B0%E6%8D%AE%E5%8C%85%E5%B0%86%E8%A2%AB%E5%86%99%E5%85%A5%E5%AF%B9%E5%BA%94%E8%BF%9E%E6%8E%A5%E7%9A%84%E6%97%A0%E7%95%8C%E7%BC%93%E5%86%B2%E5%8C%BA%E5%86%85%E7%AD%89%E5%BE%85%E5%8F%91%E9%80%81%20%EF%BC%8C%E5%86%99%E5%85%A5%5Cn%E7%BC%93%E5%86%B2%E5%8C%BA%E5%90%8E%E9%80%BB%E8%BE%91%E8%A7%86%E4%B8%BA%E5%A4%84%E7%90%86%E5%AE%8C%E6%AF%95%EF%BC%8C%E7%BD%91%E7%BB%9C%20IO%20%E4%B8%8D%E4%BC%9A%E9%98%BB%E5%A1%9E%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%0Aend%0AServer%20--%3EShunt%3A%20(SystemMessage)%20OnConnectionOpenedEvent%0AShunt%20--%3E%20Shunt%3A%20%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86%0AServer%20--%3EShunt%3A%20(ShuntMessage)%20OnConnectionOpenedAfterEvent%0AShunt%20--%3E%20Shunt%3A%20%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86%0A%0Aloop%20Read%20Loop%0AClient-%3EServer%3A%E5%8F%91%E9%80%81%E6%95%B0%E6%8D%AE%E5%8C%85%0Aabox%20right%20of%20Client%3A%20%E6%95%B0%E6%8D%AE%E5%8C%85%E5%B0%86%E8%A2%AB%E5%8F%91%E9%80%81%E5%88%B0%E8%BF%9E%E6%8E%A5%E5%AF%B9%E5%BA%94%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%E7%9A%84%E6%97%A0%E7%95%8C%E7%BC%93%E5%86%B2%E5%8C%BA%E5%86%85%0AServer%20--%3EShunt%3A%20(ShuntMessage)%20OnConnectionReceivePacketEvent%0AShunt%20--%3E%20Shunt%3A%20%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86%0AShunt%20--%3E%20Server%3A%20%E5%9B%9E%E5%A4%8D%E6%B6%88%E6%81%AF%0AServer%20--%3E%20Server%3A%20%E5%86%99%E5%85%A5%20Write%20Loop%0Aend%0A%0AClient%20%3C-%3EServer%3A%20%E6%96%AD%E5%BC%80%E6%88%96%E5%85%B3%E9%97%AD%E8%BF%9E%E6%8E%A5%0AServer%20--%3EShunt%3A%20(SystemMessage)%20OnConnectionClosedEvent%0AShunt%20--%3E%20Shunt%3A%20%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86%0AThis is a titleMinotaur ServerClientServerShuntSystem 消息将全局单线程执行,Shunt 消息将会在连接当前所在分流渠道内执行。相同分流渠道的消息将串行处理,不同分流渠道消息并行处理。连接可根据业务场景灵活的通过 srv.UseShunt 来切换当前所处的分流渠道异步消息(SystemMessage) srv.PushAsyncMessage(ShuntMessage) srv.PushShuntAsyncMessage(SystemMessage) srv.PushUniqueAsyncMessage(ShuntMessage) srv.PushUniqueShuntAsyncMessage Unique 消息将会在上一个相同消息未执行完毕的情况下忽略后续消息通过 WebSocket、TCP、UDP、KCP 等协议与服务器建立连接写入数据包数据包将被写入对应连接的无界缓冲区内等待发送 ,写入缓冲区后逻辑视为处理完毕,网络 IO 不会阻塞分流渠道(SystemMessage) OnConnectionOpenedEvent消息处理(ShuntMessage) OnConnectionOpenedAfterEvent消息处理发送数据包数据包将被发送到连接对应分流渠道的无界缓冲区内(ShuntMessage) OnConnectionReceivePacketEvent消息处理回复消息写入 Write Loop断开或关闭连接(SystemMessage) OnConnectionClosedEvent消息处理loop[Write Loop]loop[Read Loop] \ No newline at end of file +title%20This%20is%20a%20title%0A%0Aparticipantspacing%20equal%0A%23participantspacing%20gives%20manual%20control%20of%20spacing%20between%20participants%2C%20equal%3A%20equal%20distance%20between%20all%20participants%2C%20number%20i.e.%2020.5%3A%20minimum%20space%0A%0Aactor%20Client%23lightgreen%0A%23supported%20participant%20types%3A%20participant%2C%20actor%2C%20boundary%2C%20control%2C%20entity%2C%20database%0A%0Aparticipantgroup%20%23lightgreen%20Minotaur%20Server%0Aparticipant%20Server%0Aparticipant%20Shunt%0Aabox%20left%20of%20Shunt%3A%20System%20%E6%B6%88%E6%81%AF%E5%B0%86%E5%85%A8%E5%B1%80%E5%8D%95%E7%BA%BF%E7%A8%8B%E6%89%A7%E8%A1%8C%EF%BC%8CShunt%20%E6%B6%88%E6%81%AF%E5%B0%86%E4%BC%9A%5Cn%E5%9C%A8%E8%BF%9E%E6%8E%A5%E5%BD%93%E5%89%8D%E6%89%80%E5%9C%A8%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%E5%86%85%E6%89%A7%E8%A1%8C%E3%80%82%E7%9B%B8%E5%90%8C%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%E7%9A%84%5Cn%E6%B6%88%E6%81%AF%E5%B0%86%E4%B8%B2%E8%A1%8C%E5%A4%84%E7%90%86%EF%BC%8C%E4%B8%8D%E5%90%8C%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%E6%B6%88%E6%81%AF%E5%B9%B6%E8%A1%8C%E5%A4%84%E7%90%86%E3%80%82%5Cn%5Cn%E8%BF%9E%E6%8E%A5%E5%8F%AF%E6%A0%B9%E6%8D%AE%E4%B8%9A%E5%8A%A1%E5%9C%BA%E6%99%AF%E7%81%B5%E6%B4%BB%E7%9A%84%E9%80%9A%E8%BF%87%20srv.UseShunt%20%E6%9D%A5%5Cn%E5%88%87%E6%8D%A2%E5%BD%93%E5%89%8D%E6%89%80%E5%A4%84%E7%9A%84%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%0Aabox%20left%20of%20Shunt%3A%20%E5%BC%82%E6%AD%A5%E6%B6%88%E6%81%AF%5Cn%5Cn(SystemMessage)%20srv.PushAsyncMessage%5Cn(ShuntMessage)%20srv.PushShuntAsyncMessage%5Cn(SystemMessage)%20srv.PushUniqueAsyncMessage%5Cn(ShuntMessage)%20srv.PushUniqueShuntAsyncMessage%5Cn%5Cn%20Unique%20%E6%B6%88%E6%81%AF%E5%B0%86%E4%BC%9A%E5%9C%A8%E4%B8%8A%E4%B8%80%E4%B8%AA%E7%9B%B8%E5%90%8C%E6%B6%88%E6%81%AF%E6%9C%AA%E6%89%A7%E8%A1%8C%E5%AE%8C%E6%AF%95%5Cn%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%BF%BD%E7%95%A5%E5%90%8E%E7%BB%AD%E6%B6%88%E6%81%AF%0Aend%0A%0AClient-%3EServer%3A%E9%80%9A%E8%BF%87%20WebSocket%E3%80%81TCP%E3%80%81UDP%E3%80%81KCP%20%E7%AD%89%E5%8D%8F%E8%AE%AE%E4%B8%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5%0Aloop%20Write%20Loop%0AServer%20-%3EClient%3A%E5%86%99%E5%85%A5%E6%95%B0%E6%8D%AE%E5%8C%85%0Aabox%20left%20of%20Server%3A%20%E6%95%B0%E6%8D%AE%E5%8C%85%E5%B0%86%E8%A2%AB%E5%86%99%E5%85%A5%E5%AF%B9%E5%BA%94%E8%BF%9E%E6%8E%A5%E7%9A%84%E7%BC%93%E5%86%B2%E5%8C%BA%E5%86%85%E7%AD%89%E5%BE%85%E5%8F%91%E9%80%81%20%EF%BC%8C%E5%86%99%E5%85%A5%5Cn%E7%BC%93%E5%86%B2%E5%8C%BA%E5%90%8E%E9%80%BB%E8%BE%91%E8%A7%86%E4%B8%BA%E5%A4%84%E7%90%86%E5%AE%8C%E6%AF%95%EF%BC%8C%E7%BD%91%E7%BB%9C%20IO%20%E4%B8%8D%E4%BC%9A%E9%98%BB%E5%A1%9E%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%0Aend%0AServer%20--%3EShunt%3A%20(SystemMessage)%20OnConnectionOpenedEvent%0AShunt%20--%3E%20Shunt%3A%20%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86%0AServer%20--%3EShunt%3A%20(ShuntMessage)%20OnConnectionOpenedAfterEvent%0AShunt%20--%3E%20Shunt%3A%20%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86%0A%0Aloop%20Read%20Loop%0AClient-%3EServer%3A%E5%8F%91%E9%80%81%E6%95%B0%E6%8D%AE%E5%8C%85%0Aabox%20right%20of%20Client%3A%20%E6%95%B0%E6%8D%AE%E5%8C%85%E5%B0%86%E8%A2%AB%E5%8F%91%E9%80%81%E5%88%B0%E8%BF%9E%E6%8E%A5%E5%AF%B9%E5%BA%94%E5%88%86%E6%B5%81%E6%B8%A0%E9%81%93%E7%9A%84%E7%BC%93%E5%86%B2%E5%8C%BA%E5%86%85%0AServer%20--%3EShunt%3A%20(ShuntMessage)%20OnConnectionReceivePacketEvent%0AShunt%20--%3E%20Shunt%3A%20%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86%0AShunt%20--%3E%20Server%3A%20%E5%9B%9E%E5%A4%8D%E6%B6%88%E6%81%AF%0AServer%20--%3E%20Server%3A%20%E5%86%99%E5%85%A5%20Write%20Loop%0Aend%0A%0AClient%20%3C-%3EServer%3A%20%E6%96%AD%E5%BC%80%E6%88%96%E5%85%B3%E9%97%AD%E8%BF%9E%E6%8E%A5%0AServer%20--%3EShunt%3A%20(SystemMessage)%20OnConnectionClosedEvent%0AShunt%20--%3E%20Shunt%3A%20%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86%0AThis is a titleMinotaur ServerClientServerShuntSystem 消息将全局单线程执行,Shunt 消息将会在连接当前所在分流渠道内执行。相同分流渠道的消息将串行处理,不同分流渠道消息并行处理。连接可根据业务场景灵活的通过 srv.UseShunt 来切换当前所处的分流渠道异步消息(SystemMessage) srv.PushAsyncMessage(ShuntMessage) srv.PushShuntAsyncMessage(SystemMessage) srv.PushUniqueAsyncMessage(ShuntMessage) srv.PushUniqueShuntAsyncMessage Unique 消息将会在上一个相同消息未执行完毕的情况下忽略后续消息通过 WebSocket、TCP、UDP、KCP 等协议与服务器建立连接写入数据包数据包将被写入对应连接的缓冲区内等待发送 ,写入缓冲区后逻辑视为处理完毕,网络 IO 不会阻塞分流渠道(SystemMessage) OnConnectionOpenedEvent消息处理(ShuntMessage) OnConnectionOpenedAfterEvent消息处理发送数据包数据包将被发送到连接对应分流渠道的缓冲区内(ShuntMessage) OnConnectionReceivePacketEvent消息处理回复消息写入 Write Loop断开或关闭连接(SystemMessage) OnConnectionClosedEvent消息处理loop[Write Loop]loop[Read Loop] \ No newline at end of file diff --git a/.github/sequence-diagram/server-gdi.text b/.github/sequence-diagram/server-gdi.text index 5463b93..150dfd4 100644 --- a/.github/sequence-diagram/server-gdi.text +++ b/.github/sequence-diagram/server-gdi.text @@ -16,7 +16,7 @@ end Client->Server:通过 WebSocket、TCP、UDP、KCP 等协议与服务器建立连接 loop Write Loop Server ->Client:写入数据包 -abox left of Server: 数据包将被写入对应连接的无界缓冲区内等待发送 ,写入\n缓冲区后逻辑视为处理完毕,网络 IO 不会阻塞分流渠道 +abox left of Server: 数据包将被写入对应连接的缓冲区内等待发送 ,写入\n缓冲区后逻辑视为处理完毕,网络 IO 不会阻塞分流渠道 end Server -->Shunt: (SystemMessage) OnConnectionOpenedEvent Shunt --> Shunt: 消息处理 @@ -25,7 +25,7 @@ Shunt --> Shunt: 消息处理 loop Read Loop Client->Server:发送数据包 -abox right of Client: 数据包将被发送到连接对应分流渠道的无界缓冲区内 +abox right of Client: 数据包将被发送到连接对应分流渠道的缓冲区内 Server -->Shunt: (ShuntMessage) OnConnectionReceivePacketEvent Shunt --> Shunt: 消息处理 Shunt --> Server: 回复消息