เวอร์ชันใหม่ล่าสุด โค้ดได้รับการจัดระเบียบอย่างมาก แต่ละฟังก์ชันถูกกำหนดแยกกันในไฟล์ต้นฉบับ go เฉพาะ และอินเทอร์เฟซและสถาปัตยกรรมได้รับการกำหนดใหม่
-------- --------
| server | | client |
-------- --------
| |
-------------
|
-----------
| bootstrap |
-----------
|
-----------
| protocols |
-----------
|
---------
| handler |
---------
คำจำกัดความของอินเทอร์เฟซ
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
}
สร้างบูทสแตรป
func NewBootStrap ( config * Config , contextFactory * ContextFactory , connectionSetting func ( conn net. Conn )) Bootstrap
ในหมู่พวกเขา Config ใช้เพื่อกำหนดขีดจำกัดจำนวนการเชื่อมต่อ Bootstrap เป็นหลัก และอาจจำเป็นต้องขยายในอนาคตหรือไม่
type Config struct {
//最大连接数
MaxConnection int
//最大并发处理个数
MaxConcurrentHandler int
//是否顺序处理消息,默认false,即可以并发处理消息
OrderHandler bool
}
วิธี func connectionSetting(conn net.Conn)
ส่วนใหญ่จะใช้เพื่อปรับแต่งคุณสมบัติของ net.Conn เมื่อสร้างการเชื่อมต่อ ในอนาคตอาจไม่มีวิธีการเริ่มต้น
การสร้าง contextFactory จำเป็นต้องใช้
func NewContextFactory ( initContextFunc func ( context * Context )) * ContextFactory
เริ่มต้นบริบทเมื่อสร้างบริบทหลังจากสร้างการเชื่อมต่อ เช่น การตั้งค่าโปรโตคอล ตัวจัดการ ฯลฯ
ปิดบูตสแตรป
การเรียกเมธอด Close() จะปิดการเชื่อมต่อทั้งหมดที่จัดการโดย Bootstrap
สร้างเซิร์ฟเวอร์
เรียก Bootstrap.NewServer()
เพื่อสร้าง == ปัจจุบันรองรับเฉพาะ TCP== เท่านั้น
การเริ่มต้นเซิร์ฟเวอร์
โทร Server.Bind() เพื่อเริ่มการตรวจสอบ หากคุณต้องการฟังหลายพอร์ต โปรดสร้างเซิร์ฟเวอร์เพิ่มเติม คุณสามารถแชร์ Bootstrap เพื่อจัดการลิงก์ได้
สร้างไคลเอนต์
โทร Bootstrap.NewClient()
เพื่อสร้าง == ปัจจุบันรองรับเฉพาะ TCP== เท่านั้น
ลูกค้าเริ่มต้น
โทรหา 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 ()
}
บันทึก: