先安装一下obsidian插件kroki,然后可用。


blockdiag {
  Kroki -> generates -> "Block diagrams";
  Kroki -> is -> "very easy!";
 
  Kroki [color = "greenyellow"];
  "Block diagrams" [color = "pink"];
  "very easy!" [color = "orange"];
}
@startmindmap
skinparam monochrome true
+ OS
++ Ubuntu
+++ Linux Mint
+++ Kubuntu
+++ Lubuntu
+++ KDE Neon
++ LMDE
++ SolydXK
++ SteamOS
++ Raspbian
-- Windows 95
-- Windows 98
-- Windows NT
--- Windows 8
--- Windows 10
@endmindmap
@startuml
 
interface RefCounted
abstract class RefCountedImplT<T>
RefCounted <|.. RefCountedImplT
 
' Publisher hierarchy
class Publisher
class PublisherImpl
class TCPPublisher  
class RedisPublisher
class MulticastPublisher 
class WebsocketPublisher
 
RefCountedImplT <|-- Publisher
Publisher <|-- PublisherImpl
Publisher <|-- TCPPublisher
Publisher <|-- RedisPublisher  
Publisher <|-- MulticastPublisher
Publisher <|-- WebsocketPublisher
 
' Service hierarchy  
class Service
class SHL1HandlerThread
class SHL2HandlerThread  
class SZL1HandlerThread
class SZL2HandlerThread
class HKExHandlerThread
class NEEQHandlerThread
class MessageForwardHandler
class ReplayHandler
class XSHEHandlerThread
class MessageConvertHandler
class XSHEL1Forward
class L2RebuildHandler
 
RefCountedImplT <|-- Service
Service <|-- SHL1HandlerThread
Service <|-- SHL2HandlerThread
Service <|-- SZL1HandlerThread
Service <|-- SZL2HandlerThread 
Service <|-- HKExHandlerThread
Service <|-- NEEQHandlerThread
Service <|-- MessageForwardHandler
Service <|-- ReplayHandler
Service <|-- XSHEHandlerThread
Service <|-- MessageConvertHandler
Service <|-- XSHEL1Forward
Service <|-- L2RebuildHandler
 
' Connection hierarchy
class Connection
class TCPConnection
class RedisConnection
class WebsocketConnection
class MulticastConnection
 
RefCountedImplT <|-- Connection
Connection <|-- TCPConnection
Connection <|-- RedisConnection
Connection <|-- WebsocketConnection
Connection <|-- MulticastConnection
 
' IOManager hierarchy
class IOManager
class IOManagerImpl
 
RefCountedImplT <|-- IOManager
IOManager <|-- IOManagerImpl
 
' Thread hierarchy
class Thread
class ASIOThread
class WorkerThread
class TimerThread
 
RefCountedImplT <|-- Thread
Thread <|-- ASIOThread
Thread <|-- WorkerThread
Thread <|-- TimerThread
 
' Other classes
class HTTPHandler
class MessageQueue
class BlockingQueue
class RingBuffer
class SubscriberManager
class MessageDispatcher
 
RefCountedImplT <|-- HTTPHandler
RefCountedImplT <|-- MessageQueue
MessageQueue <|-- BlockingQueue
MessageQueue <|-- RingBuffer
RefCountedImplT <|-- SubscriberManager
RefCountedImplT <|-- MessageDispatcher
 
@enduml
$r = 0.2in
linerad = 0.75*$r
linewid = 0.25
 
# Start and end blocks
#
box "element" bold fit
line down 50% from last box.sw
dot rad 250% color black
X0: last.e + (0.3,0)
arrow from last dot to X0
move right 3.9in
box wid 5% ht 25% fill black
X9: last.w - (0.3,0)
arrow from X9 to last box.w
 
 
# The main rule that goes straight through from start to finish
#
box "object-definition" italic fit at 11/16 way between X0 and X9
arrow to X9
arrow from X0 to last box.w
 
# The LABEL: rule
#
arrow right $r from X0 then down 1.25*$r then right $r
oval " LABEL " fit
arrow 50%
oval "\":\"" fit
arrow 200%
box "position" italic fit
arrow
line right until even with X9 - ($r,0) \
  then up until even with X9 then to X9
arrow from last oval.e right $r*0.5 then up $r*0.8 right $r*0.8
line up $r*0.45 right $r*0.45 then right
 
# The VARIABLE = rule
#
arrow right $r from X0 then down 2.5*$r then right $r
oval " VARIABLE " fit
arrow 70%
box "assignment-operator" italic fit
arrow 70%
box "expr" italic fit
line right until even with X9 - ($r,0) \
  then up until even with X9 then to X9
 
# The PRINT rule
#
arrow right $r from X0 then down 3.75*$r then right $r
oval "\"print\"" fit
arrow
box "print-args" italic fit
line right until even with X9 - ($r,0) \
  then up until even with X9 then to X9
@startuml
' Base Classes
interface RefCounted {
  +{abstract} AddRef()
  +{abstract} ReleaseRef()
}
 
abstract class RefCountedImplT<T> {
  #m_RefCount: volatile int
  +AddRef()
  +ReleaseRef()
}
 
' Core Infrastructure
package "Core" {
  class IOManager
  class IOManagerImpl
  class Connection
  class Publisher
  class Service
  class Thread
}
 
' Network Classes
package "Network" {
  class TCPConnection
  class WebSocketConnection
  class MulticastConnection
  class RedisConnection
}
 
' Market Data Services  
package "MarketData" {
  class SHMarketHandler
  class SZMarketHandler
  class HKMarketHandler
  class L1Handler
  class L2Handler
}
 
' Threading
package "Threading" {
  class ASIOThread
  class WorkerThread
  class TimerThread
}
 
' Publishers
package "Publishers" {
  class TCPPublisher
  class WebSocketPublisher
  class MulticastPublisher
  class RedisPublisher
}
 
' Inheritance
RefCounted <|.. RefCountedImplT
RefCountedImplT <|-- IOManager
RefCountedImplT <|-- Connection
RefCountedImplT <|-- Publisher
RefCountedImplT <|-- Service
RefCountedImplT <|-- Thread
 
IOManager <|-- IOManagerImpl
 
Connection <|-- TCPConnection
Connection <|-- WebSocketConnection
Connection <|-- MulticastConnection
Connection <|-- RedisConnection
 
Thread <|-- ASIOThread
Thread <|-- WorkerThread
Thread <|-- TimerThread
 
Publisher <|-- TCPPublisher
Publisher <|-- WebSocketPublisher
Publisher <|-- MulticastPublisher
Publisher <|-- RedisPublisher
 
Service <|-- SHMarketHandler
Service <|-- SZMarketHandler
Service <|-- HKMarketHandler
Service <|-- L1Handler
Service <|-- L2Handler
 
@enduml