W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
?gtcp
?模塊實(shí)現(xiàn)簡(jiǎn)便易用、輕量級(jí)的?TCPServer
?服務(wù)端。
使用方式:
import "github.com/gogf/gf/v2/net/gtcp"
接口文檔: https://pkg.go.dev/github.com/gogf/gf/v2/net/gtcp
type Server
func GetServer(name ...interface{}) *Server
func NewServer(address string, handler func(*Conn), name ...string) *Server
func NewServerKeyCrt(address, crtFile, keyFile string, handler func(*Conn), name ...string) *Server
func NewServerTLS(address string, tlsConfig *tls.Config, handler func(*Conn), name ...string) *Server
func (s *Server) Close() error
func (s *Server) Run() (err error)
func (s *Server) SetAddress(address string)
func (s *Server) SetHandler(handler func(*Conn))
func (s *Server) SetTLSConfig(tlsConfig *tls.Config)
func (s *Server) SetTLSKeyCrt(crtFile, keyFile string) error
其中,?GetServer
?使用單例模式通過(guò)給定一個(gè)唯一的名稱獲取/創(chuàng)建一個(gè)單例?Server
?,后續(xù)可通過(guò)?SetAddress
?和?SetHandler
?方法動(dòng)態(tài)修改?Server
?屬性;?NewServer
?則直接根據(jù)給定參數(shù)創(chuàng)建一個(gè)?Server
?對(duì)象,并可指定名稱。
我們通過(guò)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的?echo
?服務(wù)器來(lái)演示?TCPServer
?的使用:
package main
import (
"fmt"
"github.com/gogf/gf/v2/net/gtcp"
)
func main() {
gtcp.NewServer("127.0.0.1:8999", func(conn *gtcp.Conn) {
defer conn.Close()
for {
data, err := conn.Recv(-1)
if len(data) > 0 {
if err := conn.Send(append([]byte("> "), data...)); err != nil {
fmt.Println(err)
}
}
if err != nil {
break
}
}
}).Run()
}
在這個(gè)示例中我們使用了?Send
?和?Recv
?來(lái)發(fā)送和接收數(shù)據(jù)。其中?Recv
?方法會(huì)通過(guò)阻塞方式接收數(shù)據(jù),直到客戶端”發(fā)送完畢一條數(shù)據(jù)”(執(zhí)行一次?Send
?,底層?Socket
?通信不帶緩沖實(shí)現(xiàn)),或者關(guān)閉鏈接。
執(zhí)行之后我們使用?telnet
?工具來(lái)進(jìn)行測(cè)試:
john@home:~$ telnet 127.0.0.1 8999
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello
> hello
hi there
> hi there
每一個(gè)客戶端發(fā)起的?TCP
?鏈接,?TCPServer
?都會(huì)創(chuàng)建一個(gè)?goroutine
?進(jìn)行處理,直至?TCP
?鏈接斷開(kāi)。由于?goroutine
?比較輕量級(jí),因此可以支撐很高的并發(fā)量。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: