Une toute nouvelle version, le code a été fortement organisé, chaque fonction est définie séparément dans un fichier source go spécifique, et l'interface et l'architecture sont redéfinies.
-------- --------
| server | | client |
-------- --------
| |
-------------
|
-----------
| bootstrap |
-----------
|
-----------
| protocols |
-----------
|
---------
| handler |
---------
Définition de l'interface
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
}
Créer un bootstrap
func NewBootStrap ( config * Config , contextFactory * ContextFactory , connectionSetting func ( conn net. Conn )) Bootstrap
Parmi eux, Config est principalement utilisé pour définir la limite du nombre de connexions Bootstrap et s'il faut les traiter simultanément. Il devra peut-être être étendu à l'avenir.
type Config struct {
//最大连接数
MaxConnection int
//最大并发处理个数
MaxConcurrentHandler int
//是否顺序处理消息,默认false,即可以并发处理消息
OrderHandler bool
}
La méthode func connectionSetting(conn net.Conn)
est principalement utilisée pour personnaliser les propriétés de net.Conn lors de la création d'une connexion. Il peut y avoir une méthode par défaut après l'optimisation.
La création de contextFactory nécessite l'utilisation de
func NewContextFactory ( initContextFunc func ( context * Context )) * ContextFactory
Initialisez le contexte lors de la création du contexte après avoir établi la connexion, comme la définition du protocole, du gestionnaire, etc.
Bootstrap désactivé
L'appel de la méthode Close() fermera toutes les connexions gérées par Bootstrap.
Créer un serveur
Appelez Bootstrap.NewServer()
pour créer, == ne prend actuellement en charge que TCP==
Démarrage du serveur
Appelez Server.Bind() pour démarrer la surveillance. Si vous souhaitez écouter plusieurs ports, veuillez créer plus de serveurs. Vous pouvez partager un Bootstrap pour gérer les liens.
CréerClient
Appelez Bootstrap.NewClient()
pour créer, == ne prend actuellement en charge que TCP==
Le client démarre
Appeler 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 ()
}
Note: