瀏覽代碼

Merge branch 'dev' of http://code.dashoo.cn/dashoo/genepoint_service into dev

luchm 4 年之前
父節點
當前提交
ed5f47ed63
共有 1 個文件被更改,包括 69 次插入4 次删除
  1. 69 4
      src/dashoo.cn/genepoint_srv/main.go

+ 69 - 4
src/dashoo.cn/genepoint_srv/main.go

@@ -3,7 +3,6 @@ package main
 import (
 	"fmt"
 	"log"
-	"net"
 	"os"
 	"os/signal"
 	"runtime"
@@ -33,19 +32,34 @@ var temp bool
 var timer *time.Timer
 
 var err error
+
+// 任务处理控制层
 var ctrl converse.ConverseController
+
+// 连接断开标识
 var disconnect = make(chan bool)
+
+// 是否执行任务标识
 var cronstart = false
 
 var timeOut = 40 * time.Second
 
-var wsConn *websocket.Conn //全局websocket连接
+//全局websocket连接
+var wsConn *websocket.Conn
+
+// 避免重复连接标识
 var lockReconnect = false
+
+// 连接超时时长
 var heartTimeOut = 10 * time.Second
+
+// 初始心跳时间
 var heartTime = time.Now()
 
 func main() {
 	temp = false
+
+	// 加载配置文件中服务器地址
 	utils.LoadConfig("conf/app.conf")
 
 	// 初始化基点接口服务器
@@ -57,8 +71,10 @@ func main() {
 	//定期清理已完成任务信息
 	go ClearSuccessfulTask()
 
+	// 监听收到的信号
 	interrupt := make(chan os.Signal, 1)
 	signal.Notify(interrupt, os.Interrupt)
+
 	var done = make(chan struct{})
 	defer close(done)
 
@@ -148,6 +164,7 @@ func main() {
 func connectWebSocket() bool {
 	log.Printf("connecting to %s", gpServiceUrl)
 
+	// 判断是否重复连接
 	if lockReconnect{
 		return false
 	}
@@ -175,8 +192,10 @@ func connectWebSocket() bool {
 
 					wsConn = conn
 
+					// 建立链接即 开始发送心跳请求
+					echo()
 
-					// 设置心跳处理事件
+					/*// 设置心跳处理事件
 					wsConn.SetPingHandler(func(message string) error {
 						log.Println("ping received", message)
 						err := wsConn.WriteControl(websocket.PongMessage, []byte(message), time.Now().Add(time.Second))
@@ -189,7 +208,7 @@ func connectWebSocket() bool {
 						// 更新心跳时间
 						heartTime = time.Now()
 						return err
-					})
+					})*/
 
 					log.Println("WebSocket连接状态: ", wsConn != nil)
 					// defer wsConn.Close()
@@ -349,3 +368,49 @@ func Goid() int {
 func initGpServiceUrl() {
 	gpServiceUrl = utils.Cfg.MustValue("server", "gpServiceUrl")
 }
+
+// 初始化连接后 开始发送心跳
+func echo() {
+	// 设置心跳处理
+	wsConn.SetPongHandler(
+		/*func(message string) error {
+		log.Println("pong received:", message)
+		return err*/
+		func(message string) error {
+			log.Println("pong received", message)
+
+			// 更新心跳时间
+			heartTime = time.Now()
+			return err
+	})
+
+	go func() {
+		// 设定ping
+		pingTimer := time.NewTicker(10 * time.Second)
+		for {
+			select {
+			case <-pingTimer.C:
+				go func() {
+					log.Println("ping msg")
+					err := wsConn.WriteControl(websocket.PingMessage, []byte("Do ping"), time.Now().Add(5 * time.Second))
+					if err != nil {
+						log.Println(err)
+					}
+				}()
+			}
+		}
+	}()
+	for {
+		mt, message, err := wsConn.ReadMessage()
+		if err != nil {
+			log.Println("read:", err)
+			break
+		}
+		log.Printf("recv: %s", message)
+		err = wsConn.WriteMessage(mt, message)
+		if err != nil {
+			log.Println("write:", err)
+			break
+		}
+	}
+}