使用Go通过HTTP发送连续数据

时间:2016-06-19 16:20:31

标签: json web-services http reactjs go

我目前正在开发一个Go中的Web服务,它基本上接受请求并发回JSON,这很典型。但是,这个特殊的JSON需要10秒以上才能完成并返回。因为我也在创建一个依赖于JSON的网站,并且JSON内容可能会发生变化,所以我实现了一个快速生成并返回(可能更新的或新的)名称的路由作为占位符,以后将被相应的实际值替换到名字。这背后的整个想法是网站将连接到服务,几乎立即返回JSON填充表,然后等待实际数据填写从服务回来。

这是我遇到问题的地方,可能是因为我对Go很新,并且完全不了解它庞大的图书馆。我之前通过HTTP请求发送JSON的方法是ResponseWriter.Write(theJSON)。但是,Write()会终止响应,所以网站必须不断ping服务,这可能会在未来发生,并且将来会是灾难性的

所以,我正在寻找一些行业知识来解决我的问题。 HTTP连接可以像那样连续,其中数据是通过相同的http请求分段发送的吗?这甚至是一个计算或安全的智能功能,还是有更好的方法来做我提出的建议?最后,Go甚至支持这样的功能,我将如何异步处理它以进行性能优化?

为了记录,我的网站正在使用React.js。谢谢!

3 个答案:

答案 0 :(得分:2)

我会使用https websockets来实现这种效果,而不是长期持久的tcp.con,甚至除此之外。请参阅go go.org中的golang.org/x/net/websocket包或gorilla web toolkit中的优秀http://www.gorillatoolkit.org/pkg/websocket以获取详细信息。您可以使用填充和较小的子单元来允许中断和重新启动提交//或一种diff协议来重写以前提交的JSON。我发现websocket非常稳定,即使连接故障很小。

答案 1 :(得分:0)

Go确实具有保持活力的能力net.TCPConn的SetKeepAlive

kaConn, _ := tcpkeepalive.EnableKeepAlive(conn)
kaConn.SetKeepAliveIdle(30*time.Second)
kaConn.SetKeepAliveCount(4)
kaConn.SetKeepAliveInterval(5*time.Second)

来自felixqe的代码

答案 2 :(得分:-1)

您可以将restapi用作网络服务,并可以将数据作为json.SO发送,您可以通过通信渠道不断发送数据。