netx
1.0.0
새로운 버전에서는 코드가 크게 구성되었으며 각 기능은 특정 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
프로토콜, 핸들러 등의 설정 등 연결을 설정한 후 Context를 생성할 때 Context를 초기화합니다.
부트스트랩 꺼짐
Close() 메서드를 호출하면 Bootstrap에서 관리하는 모든 연결이 닫힙니다.
서버 생성
Bootstrap.NewServer()
호출하여 생성합니다. == 현재 TCP만 지원합니다==
서버 시작
모니터링을 시작하려면 Server.Bind()를 호출하세요. 여러 포트를 수신하려면 더 많은 서버를 생성하세요. 부트스트랩을 공유하여 링크를 관리할 수 있습니다.
클라이언트 생성
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 ()
}
메모: