إصدار جديد تمامًا، تم تنظيم التعليمات البرمجية بشكل كبير، ويتم تعريف كل وظيفة بشكل منفصل في ملف مصدر محدد، ويتم إعادة تعريف الواجهة والهندسة المعمارية.
-------- --------
| 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
من بينها، يتم استخدام التكوين بشكل أساسي لتعيين الحد الأقصى لعدد اتصالات 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 ()
}
مذكرة: