Skip to content

Commit 4e39de7

Browse files
committed
feat:add ws heart check
1 parent 173df62 commit 4e39de7

File tree

2 files changed

+45
-17
lines changed

2 files changed

+45
-17
lines changed

controllers/ws_controller.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,7 @@ func (con wsController) Ws(c *gin.Context) {
5555
LOOP:
5656
mt, message, err := ws.ReadMessage()
5757
if err != nil {
58-
err = ws.WriteMessage(mt, ReturnResp(err.Error(), 0, 0))
59-
if err != nil {
60-
log.Println("write:", err)
61-
break
62-
}
63-
goto LOOP
58+
break
6459
}
6560

6661
var cmd Cmd
@@ -109,10 +104,18 @@ func (con wsController) Ws(c *gin.Context) {
109104
}
110105

111106
var username string = uInfo["user"].(string)
112-
ctx := context.WithValue(context.Background(), "username", username)
107+
//判断是不是心跳信息
108+
if cmd.Sk == "ping" {
109+
err = ws.WriteMessage(mt, ReturnResp("ping", 1, uint8(cmd.Db)))
110+
if err != nil {
111+
log.Println("write:", err)
112+
break
113+
}
114+
goto LOOP
115+
}
113116

117+
ctx := context.WithValue(context.Background(), "username", username)
114118
var client *redis.Client
115-
116119
client = global.GlobalClients[cmd.Sk]
117120
if client == nil {
118121
redisServer := global.GlobalConf.RedisServices[cmd.Sk]

web/src/utils/terminal.js

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,29 +119,54 @@ const NewShell = (id,sk,db,name)=>{
119119

120120
});
121121

122+
let timeoutObj = null
123+
const resetHeart = () => {
124+
// 连接成功后 58s发送一次心跳
125+
timeoutObj = setTimeout(function(){
126+
let auth = sessionStorage.getItem('auth')
127+
if (auth == null) {
128+
router.push('/login')
129+
}
130+
let obj = JSON.parse(auth)
131+
socket.send(
132+
JSON.stringify({
133+
sk:"ping",
134+
db:0,
135+
cmd:"",
136+
jwt:obj.jwt,
137+
})
138+
)
139+
}, 58*1000)
140+
}
141+
122142
let socket = new WebSocket('ws://'+wsUrl+"/ws/cmd")
123143
socket.onopen = () => {
124144
// 连接成功后
125145
term.loadAddon(fitAddon)
126146
term.open(document.getElementById(id));
127147
fitAddon.fit();
128148
term.focus();
149+
resetHeart();
129150
term.writeln("\x1b[38:5:29m连接中...\x1b[0m");
130151
term.write('\x1b[32m'+name+':'+db+'> \x1b[0m');
131152
}
132153
socket.onmessage = (event) => {
133154
// 接收推送的消息
134155
let data = Buffer.from(event.data)
135-
if(data[0] == 1){
136-
//成功
137-
db = data[1];
138-
term.writeln(data.slice(2,data.length).toString());
139-
}else{
140-
//错误输出
141-
term.writeln('\x1b[35m'+data.slice(2,data.length).toString()+'\x1b[0m');
156+
let resp = data.slice(2,data.length).toString()
157+
if(resp != "ping"){
158+
if(data[0] == 1){
159+
//成功
160+
db = data[1];
161+
term.writeln(resp);
162+
}else{
163+
//错误输出
164+
term.writeln('\x1b[35m'+resp+'\x1b[0m');
165+
}
166+
term.write('\x1b[32m'+name+':'+db+'> \x1b[0m');
142167
}
143-
144-
term.write('\x1b[32m'+name+':'+db+'> \x1b[0m');
168+
clearTimeout(timeoutObj);
169+
resetHeart();
145170
}
146171
socket.onclose = () => {
147172
console.log('close socket')

0 commit comments

Comments
 (0)