Versi baru, kodenya telah diatur dengan baik, setiap fungsi didefinisikan secara terpisah dalam file sumber go tertentu, dan antarmuka serta arsitektur didefinisikan ulang.
-------- --------
| server | | client |
-------- --------
| |
-------------
|
-----------
| bootstrap |
-----------
|
-----------
| protocols |
-----------
|
---------
| handler |
---------
Definisi antarmuka
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
}
Buat Bootstrap
func NewBootStrap ( config * Config , contextFactory * ContextFactory , connectionSetting func ( conn net. Conn )) Bootstrap
Diantaranya, Config terutama digunakan untuk menetapkan batas jumlah koneksi Bootstrap dan apakah akan diproses secara bersamaan. Ini mungkin perlu diperluas di masa mendatang.
type Config struct {
//最大连接数
MaxConnection int
//最大并发处理个数
MaxConcurrentHandler int
//是否顺序处理消息,默认false,即可以并发处理消息
OrderHandler bool
}
Metode func connectionSetting(conn net.Conn)
terutama digunakan untuk menyesuaikan properti net.Conn saat membuat koneksi.
Pembuatan ContextFactory memerlukan penggunaan
func NewContextFactory ( initContextFunc func ( context * Context )) * ContextFactory
Inisialisasi Konteks saat membuat Konteks setelah membuat koneksi, seperti protokol pengaturan, pengendali, dll.
Bootstrap mati
Memanggil metode Close() akan menutup semua Koneksi yang dikelola oleh Bootstrap.
Buat Server
Panggil Bootstrap.NewServer()
untuk membuat, == saat ini hanya mendukung TCP==
permulaan server
Panggil Server.Bind() untuk memulai pemantauan. Jika Anda ingin mendengarkan beberapa port, buat lebih banyak server. Anda dapat berbagi Bootstrap untuk mengelola tautan.
Buat Klien
Panggil Bootstrap.NewClient()
untuk membuat, == saat ini hanya mendukung TCP==
Klien dimulai
Panggil 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: