Eine brandneue Version, der Code wurde stark organisiert, jede Funktion ist separat in einer bestimmten Go-Quelldatei definiert und die Schnittstelle und Architektur wurden neu definiert.
-------- --------
| server | | client |
-------- --------
| |
-------------
|
-----------
| bootstrap |
-----------
|
-----------
| protocols |
-----------
|
---------
| handler |
---------
Schnittstellendefinition
type Bootstrap interface {
//创建一个新的Server
NewServer ( netType , host string ) * Server
//创建一个信的Client
NewClient ( netType , host string ) * Client
//当连接创立的时候需要被调用,可用于自定义扩展
Connection ( conn net. Conn ) ( * Context , error )
//关闭多有的链接
Close () error
//获取统计接口信息
GetStatInfo () StatInfo
}
Bootstrap erstellen
func NewBootStrap ( config * Config , contextFactory * ContextFactory , connectionSetting func ( conn net. Conn )) Bootstrap
Unter anderem wird Config hauptsächlich verwendet, um die Anzahl der Bootstrap-Verbindungen zu begrenzen und festzulegen, ob sie gleichzeitig verarbeitet werden sollen. Möglicherweise muss sie in Zukunft erweitert werden.
type Config struct {
//最大连接数
MaxConnection int
//最大并发处理个数
MaxConcurrentHandler int
//是否顺序处理消息,默认false,即可以并发处理消息
OrderHandler bool
}
Die Funktion func connectionSetting(conn net.Conn)
wird hauptsächlich zum Anpassen der Eigenschaften von net.Conn beim Erstellen einer Verbindung verwendet. Es gibt keine Standardmethode. Nach der Optimierung wird es möglicherweise eine Standardmethode geben.
Die Erstellung von contextFactory erfordert die Verwendung von
func NewContextFactory ( initContextFunc func ( context * Context )) * ContextFactory
Initialisieren Sie den Kontext beim Erstellen des Kontexts nach dem Herstellen der Verbindung, z. B. Festlegen von Protokollen, Handlern usw.
Bootstrap aus
Durch Aufrufen der Close()-Methode werden alle von Bootstrap verwalteten Verbindungen geschlossen.
Server erstellen
Rufen Sie zum Erstellen Bootstrap.NewServer()
auf. == unterstützt derzeit nur TCP==
Serverstart
Rufen Sie Server.Bind() auf, um die Überwachung zu starten. Wenn Sie mehrere Ports abhören möchten, erstellen Sie bitte weitere Server. Sie können einen Bootstrap freigeben, um Links zu verwalten.
CreateClient
Rufen Sie zum Erstellen Bootstrap.NewClient()
auf. == unterstützt derzeit nur TCP==
Client startet
Call Client.Client(timeout time.Duration)
func TestServer ( t * testing. T ) {
contextFactory := NewContextFactory ( func ( context * Context ) {
//设置
context . SetProtocols ([] Protocol { new ( defaultProtocol )})
context . SetHandler ( new ( testHandler ))
})
bootstrap := NewBootStrap ( new ( Config ), contextFactory , nil )
server := bootstrap . NewServer ( "tcp" , "127.0.0.1:9991" )
err := server . Bind ()
if err != nil {
t . Fatalf ( "启动服务器出现错误:%s" , err )
}
client := bootstrap . NewClient ( "tcp" , "127.0.0.1:9991" )
err = client . Connect ( 3 * time . Second )
if err != nil {
t . Fatalf ( "连接服务器出现错误:%s" , err )
}
context := client . GetContext ()
for i := 0 ; i < 10 ; i ++ {
context . Write ([] byte ( fmt . Sprintln ( "开始了n next" )))
}
time . Sleep ( time . Millisecond * 300 )
context . Close ()
server . Close ()
bootstrap . Close ()
}
Memo: