熱升級如何不斷開舊連線
現在有一個 tcp 長連線伺服器,單機,想實現熱升級
網上有方法可以將 server 的 fd 檔案控制程式碼通過環境變數傳遞給新啟動的子程式。
但是有個問題,新程式啟動後,新連線沒問題,舊連線怎麼轉移?只能斷開重連嗎?
參考的這篇文章:
https://www.oschina.net/translate/graceful-server-restart-with-go
使用的這個現成的庫:
github.com/facebookgo/grace/gracenet
然後這是我的測試程式碼,老程式退出後客戶端就斷開連線了:
package main
import (
"github.com/facebookgo/grace/gracenet"
"os"
"os/signal"
"syscall"
"fmt"
"net"
"time"
)
func main() {
net := gracenet.Net{}
l,err := net.Listen("tcp",":12345")
if err != nil {
panic(err)
}
go func() {
for {
conn,err := l.Accept()
if err != nil {
fmt.Println("accept 失敗",err)
return
}
go handleConn(conn)
}
}()
fmt.Println("程式啟動..")
ch := make(chan os.Signal, 10)
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM, syscall.SIGUSR2)
for {
sig := <-ch
switch sig {
case syscall.SIGINT, syscall.SIGTERM:
os.Exit(0)
case syscall.SIGUSR2:
//啟動新執行緒,超時關閉當前執行緒
pid,err := net.StartProcess()
if err != nil {
fmt.Println("新程式啟動失敗",err)
os.Exit(1)
}
fmt.Println("啟動新程式...,pid=",pid)
//停止accept
l.Close()
time.Sleep(15*time.Second)
fmt.Println("老程式退出")
os.Exit(0)
}
}
}
func handleConn(conn net.Conn) {
buf := make([]byte, 1024)
fmt.Println("client connected")
for {
n,err := conn.Read(buf)
if err != nil {
fmt.Println("client disconnected")
return
}
conn.Write(buf[0:n])
conn.Write([]byte("ok"))
}
}
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- java操作Oracle 方式一 ( 連線-》操作-》斷開連線 )JavaOracle
- Flask連線資料庫打怪升級之旅Flask資料庫
- win10 wifi熱點自動斷開怎麼辦 win10連線wifi熱點總是斷開解決方法Win10WiFi
- 保持ssh的連線不斷開
- 1204 斷開式連線
- GOLANG探測HTTP連線斷開GolangHTTP
- ADO 資料庫連線斷開重連資料庫
- 後悔升級系統iOS了?多款iPhone舊機型開放降級iOSiPhone
- Nginx配置以及熱升級Nginx
- 網路連線斷開如何解決 win10系統網路連線經常斷開Win10
- cmd 工具 ssh 保持連線不斷開
- 關於檢測TCP連線斷開TCP
- VMRC控制檯的連線已斷開..正在嘗試重新連線
- win10系統連線手機熱點頻繁斷開的解決方法Win10
- vmware中控制檯的連線已斷開…正在嘗試重新連線
- WebSocket斷線重連Web
- 如何不中斷連線保持linux伺服器持續執行 —— screen 使用介紹Linux伺服器
- java連線池解決連線中斷Java
- Matrikon FLEX OPC UA SDK升級!現在支援反向連線!Flex
- HttpClient4.X 升級 入門 + http連線池使用HTTPclient
- 筆記本win10系統下無線熱點正在斷開連線怎麼辦如何解決筆記Win10
- 京東 vue3 元件庫震撼升級,如約而至!Vue元件
- TDengine 離線升級流程
- 【問題記錄】—SignalR連線斷線重連SignalR
- TCP-ip建立連線時3次握手,斷開連線時4次揮手TCP
- OpenKruise :SidecarSet 助力 Mesh 容器熱升級UIIDE
- 俄羅斯成功斷開全球網際網路連線
- ? 抓包分析 TCP 建立和斷開連線的流程TCP
- 記一次websocket的自動斷開連線Web
- 使用secureCRT連線伺服器,防超時斷開Securecrt伺服器
- mysql自動斷開連線的問題處理MySql
- oracle連線超時自動斷開問題[轉]Oracle
- SSH連線斷開導致ORA-08104
- mobaxterm隔一段時間就斷開連線
- 判斷網路是否連線
- 升級10.2.0.4-ORA-01092: ORACLE 例項終止。強制斷開連線[轉](今天也碰到這樣的問題了)Oracle
- oracle版本升級路線圖Oracle
- 樹莓派CM4 wifi頻繁斷開連線樹莓派WiFi