Совершенно новая версия, код хорошо организован, каждая функция определяется отдельно в конкретном исходном файле 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 ()
}
Памятка: