我目前正在使用 Go 開發一個 Web 服務,它基本上接受一個請求并發送回 JSON,這很典型。然而,這個特定的 JSON 需要 10 多秒才能真正完成并返回。因為我也在創建一個依賴于 JSON 的網站,并且 JSON 內容可能會發生變化,所以我實現了一個快速生成并返回(可能更新或新的)名稱作為占位符的路由,稍后將被對應的實際值替換到名字。其背后的整個想法是網站將連接到服務,幾乎立即返回 JSON 以填充表格,然后等到要填寫的實際數據從服務返回。這是我遇到問題的地方,可能是因為我對 Go 很陌生,并且不完全理解它龐大的庫。我以前通過 HTTP 請求發回 JSON 的方法是 ResponseWriter.Write(theJSON)。但是,Write() 會終止響應,因此網站將不得不不斷地 ping 服務,這現在和將來都可能是災難性的所以,我正在尋找一些行業知識來解決我的問題。HTTP 連接可以像這樣連續,通過同一個 http 請求分段發送數據嗎?這甚至是計算或安全智能功能,還是有更好的方法來做我建議的事情?最后,Go 是否支持這樣的功能,我將如何異步處理它以優化性能?作為記錄,我的網站使用的是 React.js。
3 回答

動漫人物
TA貢獻1815條經驗 獲得超10個贊
我會使用 https websockets 來實現這種效果,而不是長時間持續存在的 tcp.con 甚至除此之外。請參閱 go 開發人員的 golang.org/x/net/websocket 包或 gorilla web 工具包的優秀http://www.gorillatoolkit.org/pkg/websocket以了解使用細節。您可以使用填充和較小的子單元來允許中斷和重新啟動提交 // 或一種差異協議來重寫以前提交的 JSON。我發現 websocket 即使有小的連接故障也相當穩定。

倚天杖
TA貢獻1828條經驗 獲得超3個贊
Go 確實有一個?;钅芰?net.TCPConn 的 SetKeepAlive
kaConn, _ := tcpkeepalive.EnableKeepAlive(conn)
kaConn.SetKeepAliveIdle(30*time.Second)
kaConn.SetKeepAliveCount(4)
kaConn.SetKeepAliveInterval(5*time.Second)
- 3 回答
- 0 關注
- 420 瀏覽
添加回答
舉報
0/150
提交
取消