Przeglądaj źródła

added websocket and using flex engine

master
sp 4 lat temu
rodzic
commit
69b35b9b68
7 zmienionych plików z 61 dodań i 19 usunięć
  1. +1
    -0
      .gitignore
  2. +46
    -14
      api1ws.go
  3. +2
    -1
      app.yaml
  4. +2
    -2
      config.json
  5. BIN
      html/favicon.ico
  6. +9
    -1
      html/index.html
  7. +1
    -1
      http_handler.go

+ 1
- 0
.gitignore Wyświetl plik

@@ -0,0 +1 @@
/cert/

+ 46
- 14
api1ws.go Wyświetl plik

@@ -3,8 +3,9 @@ package main
import (
"fmt"
"github.com/gorilla/websocket"
"log"
log "github.com/sirupsen/logrus"
"net/http"
"time"
)

const apiV1WebSocket = apiV1Prefix + "ws"
@@ -39,20 +40,32 @@ func wsReader(conn *websocket.Conn) {
return
}

WsEchoIncomingMessage(conn, string(p), messageType)
//switch messageType {
//case websocket.TextMessage:
// WsProcessingTxtMessage(conn, string(p))
// break
//case websocket.BinaryMessage:
// WsProcessingBinaryMessage(conn, p)
// break
//case websocket.PingMessage:
// break
//case websocket.PongMessage:
// break
//}
switch messageType {
case websocket.TextMessage:
WsProcessingTxtMessage(conn, string(p))
break
case websocket.BinaryMessage:
WsProcessingBinaryMessage(conn, p)
break
case websocket.PingMessage:
break
case websocket.PongMessage:
break
}
}
}

func WsProcessingTxtMessage(conn *websocket.Conn, str string) {
if str == "send dummy string for 500 times" {
go wsDummySender(conn)
} else {
WsEchoIncomingMessage(conn, str, websocket.TextMessage)
}

}

func WsProcessingBinaryMessage(conn *websocket.Conn, data []byte) {
return
}

func WsEchoIncomingMessage(conn *websocket.Conn, msg string, messageType int) {
@@ -65,3 +78,22 @@ func WsEchoIncomingMessage(conn *websocket.Conn, msg string, messageType int) {
return
}
}

func wsDummySender(conn *websocket.Conn) {
//write subsequent 5 copies, each after 1 second
log.Info("start sending server data to client ..")
p := "From server "
for i := 1; i < 500; i++ {
time.Sleep(1 * time.Second)
n := time.Now()
s := n.Format("2006-01-02 15:04:05")
p1 := p + s
//msg := fmt.Sprintf("copy %d, %s, %s", i, p, wsDummyString()) // 4M long string no issue
msg := fmt.Sprintf("copy %d, %s ", i, p1)
log.Info("dummy sender is working, ", msg)
if err := conn.WriteMessage(websocket.TextMessage, []byte(msg)); err != nil {
log.Println("wsDummySender stopped on error: ", err)
return
}
}
}

+ 2
- 1
app.yaml Wyświetl plik

@@ -1 +1,2 @@
runtime: go115
runtime: go1.15
env: flex

+ 2
- 2
config.json Wyświetl plik

@@ -2,8 +2,8 @@
"Host":"0.0.0.0",
"Port":"8080",
"DSN": "sp:sp@tcp(192.168.1.70:3306)/syd_credit?parseTime=true&loc=Australia%2FSydney&collation=utf8mb4_0900_ai_ci",
"TlsCert": "fullchain.pem",
"TlsKey": "privkey.pem",
"TlsCert": "cert/fullchain.pem",
"TlsKey": "cert/privkey.pem",
"Debug": true,
"Static": [
{

BIN
html/favicon.ico Wyświetl plik

Before After

+ 9
- 1
html/index.html Wyświetl plik

@@ -26,7 +26,15 @@


<script>
let socket = new WebSocket("wss://svr2021.lawipac.com:8080/api/v1/ws");
let host = window.location.hostname;
let protocol = window.location.protocol;
let socket = null;
if ( protocol.toLowerCase() == 'http:' ){
socket = new WebSocket("ws://" + host + ":" + location.port + "/api1/ws");
}else{ // https
socket = new WebSocket("wss://" + host + ":" + location.port + "/api1/ws");
}

console.log("Attempting Connection...");

socket.onopen = () => {

+ 1
- 1
http_handler.go Wyświetl plik

@@ -20,5 +20,5 @@ func setupHTTPHandler() {

log.Printf("Server started at %s:%s\n", config.Host, config.Port)
log.Fatal(http.ListenAndServe(config.Host+":"+config.Port, nil))
// log.Fatal(http.ListenAndServeTLS(config.Host+":"+config.Port, config.TlsCert, config.TlsKey, nil))
//log.Fatal(http.ListenAndServeTLS(config.Host+":"+config.Port, config.TlsCert, config.TlsKey, nil))
}

Ładowanie…
Anuluj
Zapisz