From a9c6ee3725631513fb9d40105405c9954f57978d Mon Sep 17 00:00:00 2001 From: taoshihan1991 <630892807@qq.com> Date: Thu, 20 Aug 2020 16:56:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0tcp=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=9A=84=E6=8E=A8=E9=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/message.go | 2 ++ controller/tcp.go | 32 ++++++++++++++++++++++++++++++++ controller/visitor.go | 15 +++++++++++++++ main.go | 9 ++++++++- 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 controller/tcp.go diff --git a/controller/message.go b/controller/message.go index 0d701fe..012fbba 100644 --- a/controller/message.go +++ b/controller/message.go @@ -72,6 +72,7 @@ func SendMessage(c *gin.Context) { }, } str, _ := json.Marshal(msg) + PushServerTcp(str) conn.WriteMessage(websocket.TextMessage,str) } if cType=="visitor"{ @@ -95,6 +96,7 @@ func SendMessage(c *gin.Context) { }, } str, _ := json.Marshal(msg) + PushServerTcp(str) for _,kefuConn:=range kefuConns{ kefuConn.WriteMessage(websocket.TextMessage,str) } diff --git a/controller/tcp.go b/controller/tcp.go new file mode 100644 index 0000000..ae6614f --- /dev/null +++ b/controller/tcp.go @@ -0,0 +1,32 @@ +package controller + +import ( + "log" + "net" +) +var clientTcpList = make([]net.Conn,0) +func NewTcpServer(tcpBaseServer string){ + listener, err := net.Listen("tcp", tcpBaseServer) + if err != nil { + log.Println("Error listening", err.Error()) + return //终止程序 + } + // 监听并接受来自客户端的连接 + for { + conn, err := listener.Accept() + if err != nil { + log.Println("Error accepting", err.Error()) + return // 终止程序 + } + clientTcpList=append(clientTcpList,conn) + } +} +func PushServerTcp(str []byte){ + for index,conn:=range clientTcpList{ + _,err:=conn.Write(str) + log.Println(index,err) + if err!=nil{ + clientTcpList=append(clientTcpList[:index],clientTcpList[index+1:]...) + } + } +} \ No newline at end of file diff --git a/controller/visitor.go b/controller/visitor.go index 8eb31ea..a050d9b 100644 --- a/controller/visitor.go +++ b/controller/visitor.go @@ -124,3 +124,18 @@ func GetVisitorMessage(c *gin.Context) { "result":result, }) } +func GetVisitorOnlines(c *gin.Context) { + users:=make([]map[string]string,0) + for uid,visitor :=range clientList{ + userInfo := make(map[string]string) + userInfo["uid"] = uid + userInfo["name"] = visitor.name + userInfo["avator"] = visitor.avator + users=append(users,userInfo) + } + c.JSON(200, gin.H{ + "code": 200, + "msg": "ok", + "result":users, + }) +} \ No newline at end of file diff --git a/main.go b/main.go index 305a893..5551ceb 100644 --- a/main.go +++ b/main.go @@ -18,12 +18,14 @@ import ( ) var ( port string + tcpport string daemon bool GoflyConfig config.Config ) func init(){ //获取参数中的数据 - flag.StringVar(&port, "port", "8080", "监听端口号") + flag.StringVar(&port, "port", "8081", "监听端口号") + flag.StringVar(&tcpport, "tcpport", "8082", "监听tcp端口号") flag.BoolVar(&daemon, "d", false, "是否为守护进程模式") flag.Parse() if flag.NFlag() < 1 { @@ -46,6 +48,7 @@ func init(){ func main() { baseServer := "0.0.0.0:"+port + tcpBaseServer := "0.0.0.0:"+tcpport log.Println("start server...\r\ngo:http://" + baseServer) engine := gin.Default() engine.LoadHTMLGlob("static/html/*") @@ -100,6 +103,7 @@ func main() { engine.GET("/mysql",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.MysqlGetConf) engine.POST("/mysql",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.MysqlSetConf) + engine.GET("/visitors_online", controller.GetVisitorOnlines) engine.POST("/visitor",controller.PostVisitor) engine.GET("/visitor",middleware.JwtApiMiddleware, controller.GetVisitor) engine.GET("/visitors",middleware.JwtApiMiddleware, controller.GetVisitors) @@ -123,5 +127,8 @@ func main() { logFile, _ := os.OpenFile("./fatal.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0660) tools.RedirectStderr(logFile) + + //tcp服务 + go controller.NewTcpServer(tcpBaseServer) engine.Run(baseServer) }