Una versión completamente nueva, el código se ha organizado en gran medida, cada función se define por separado en un archivo fuente específico y la interfaz y la arquitectura se redefinen.
-------- --------
| server | | client |
-------- --------
| |
-------------
|
-----------
| bootstrap |
-----------
|
-----------
| protocols |
-----------
|
---------
| handler |
---------
Definición de interfaz
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
}
Crear arranque
func NewBootStrap ( config * Config , contextFactory * ContextFactory , connectionSetting func ( conn net. Conn )) Bootstrap
Entre ellos, Config se utiliza principalmente para establecer el límite en la cantidad de conexiones Bootstrap y si se deben procesar al mismo tiempo. Es posible que deba ampliarse en el futuro.
type Config struct {
//最大连接数
MaxConnection int
//最大并发处理个数
MaxConcurrentHandler int
//是否顺序处理消息,默认false,即可以并发处理消息
OrderHandler bool
}
El método func connectionSetting(conn net.Conn)
se utiliza principalmente para personalizar las propiedades de net.Conn al crear una conexión. Es posible que exista un método predeterminado después de la optimización.
La creación de contextFactory requiere el uso de
func NewContextFactory ( initContextFunc func ( context * Context )) * ContextFactory
Inicialice el contexto al crear el contexto después de establecer la conexión, como configurar el protocolo, el controlador, etc.
Arrancando
Llamar al método Close() cerrará todas las conexiones administradas por Bootstrap.
Crear servidor
Llame Bootstrap.NewServer()
para crear, == actualmente solo admite TCP==
Inicio del servidor
Llame a Server.Bind() para comenzar a monitorear. Si desea escuchar varios puertos, cree más servidores. Puede compartir un Bootstrap para administrar enlaces.
CrearCliente
Llame Bootstrap.NewClient()
para crear, == actualmente solo admite TCP==
El cliente comienza
Llamar 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 ()
}
Memorándum: