我目前正在使用 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 关注
- 373 浏览
添加回答
举报
0/150
提交
取消