JustSong 3 lat temu
rodzic
commit
14fd2d07f3
3 zmienionych plików z 32 dodań i 7 usunięć
  1. 3 1
      app.js
  2. 27 4
      client/main.go
  3. 2 2
      nginx.conf

+ 3 - 1
app.js

@@ -86,7 +86,9 @@ server.listen(config.port);
 wss.on('connection', (ws) => {
   ws.on('message', (data) => {
     let message = JSON.parse(data.toString());
-    registerWebSocket(message.prefix, message.token, ws);
+    if (message.prefix) {
+      registerWebSocket(message.prefix, message.token, ws);
+    }
   });
 });
 

+ 27 - 4
client/main.go

@@ -6,6 +6,7 @@ import (
 	"log"
 	"net/url"
 	"os"
+	"time"
 )
 
 var (
@@ -18,6 +19,9 @@ type Verification struct {
 	Token  string `json:"token"`
 }
 
+type Ping struct {
+}
+
 func main() {
 	flag.Parse()
 	connString := *conn
@@ -37,6 +41,12 @@ func main() {
 		scheme = "wss"
 	}
 	u := url.URL{Scheme: scheme, Host: connUrl.Host, Path: "/"}
+	verification := &Verification{
+		Prefix: connUrl.Path[1:],
+		Token:  *token,
+	}
+	ping := &Ping{}
+	ticker := time.NewTicker(60 * time.Second)
 	for {
 		log.Printf("Connecting to %s...\n", u.String())
 		c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
@@ -45,20 +55,33 @@ func main() {
 			return
 		}
 		log.Printf("Server connected.\n")
-		verification := &Verification{
-			Prefix: connUrl.Path[1:],
-			Token:  *token,
-		}
+
 		err = c.WriteJSON(verification)
 		if err != nil {
 			log.Fatal(err.Error())
 		}
+		go func() {
+			for {
+				select {
+				case <-ticker.C:
+					if err := c.WriteJSON(ping); err != nil {
+						log.Println("Error occurred when send ping message:", err)
+						log.Println("Connection lost, retrying...")
+						_ = c.Close()
+						break
+					} else {
+						log.Println("Ping message sent.")
+					}
+				}
+			}
+		}()
 		for {
 			var message = new(Message)
 			err = c.ReadJSON(message)
 			if err != nil {
 				log.Println("Error occurred when read message:", err)
 				log.Println("Connection lost, retrying...")
+				_ = c.Close()
 				break
 			} else {
 				log.Println("New message arrived.")

+ 2 - 2
nginx.conf

@@ -1,6 +1,4 @@
 server {
-    listen 443 ssl http2;
-    listen [::]:443 ssl http2;
     server_name 你的域名;
 
     location / {
@@ -11,5 +9,7 @@ server {
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-For $remote_addr;
         proxy_cache_bypass $http_upgrade;
+        proxy_read_timeout 300s;
+        proxy_send_timeout 300s;
     }
 }