我是Go新手-以下问题:我的程序收到一个http post请求,现在我想把数据从它转发到一个活动的TCP连接(程序运行一个并行TCP服务器)。在main()
中,处理程序是这样注册的:http.HandleFunc("/rcvtelegram", handleRestRequest)
因此HTTP处理程序函数如下所示:func handleRestRequest(w http.ResponseWriter, r *http.Request) {}
到客户端的TCP连接是用main()
知道的net.Conn对象打开的。所以理想情况下我会用一个TCP sender函数启动一个go例程,监听一个传入的字符串,然后通过TCP发送它。但是怎么做呢?对于通道,我似乎必须传递所有参数,但是我在http处理函数中没有连接对象。我还想避免把tcp连接作为一个全局变量。我看到了观察者模式,但作为一个新手,它的复杂性让我感到害怕(不确定它是否解决了我的问题)。
谢谢你!
2条答案
按热度按时间vuktfyat1#
使用一个struct类型来保存通道。在该类型上实现http.handler接口:
在main函数中,为TCP发送方创建一个通道,并在goroutine中启动发送方:
使用通道建立 *RestHandler的值,并将它注册为行程常式:
xe55xuns2#
基于以上建议,我这样构建了它:
然后定义了一个自定义HTTP处理程序:
然后将其注册到
main()
中的现有TCP连接:工作正常!