|
|
@@ -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
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|