Go 在反向代理中响应正确的客户端
我正在尝试使用Go在两台服务器之间建立一个持久的TCP连接;位于本地的Go 在反向代理中响应正确的客户端,go,Go,我正在尝试使用Go在两台服务器之间建立一个持久的TCP连接;位于本地的客户端,位于远程计算机中的服务器。客户端还向PHP脚本本地提供HTTP请求。每个请求都通过TCP连接中继到远程服务器。然后将响应发送回PHP脚本 HTTP request from .php script \ \ -----> HTTP req is relayed \ client <--------------TCP connection--------
客户端
,位于远程计算机中的服务器
。客户端还向PHP
脚本本地提供HTTP请求。每个请求都通过TCP连接中继到远程服务器。然后将响应发送回PHP脚本
HTTP request from .php script
\
\ -----> HTTP req is relayed
\
client <--------------TCP connection------------> server
/
/ <------ Response is relayed
/
HTTP request from .php script
问题
有没有一种更优雅、内置的方法来实现这一点——确保对本地PHP脚本的请求和响应即使在并发请求的情况下也是正确的?这是kouton的自我回答,但使用一个“后端”连接(在本地服务器和远程服务器之间)来服务多个“前端”连接(在本地PHP和本地服务器之间)是一种多路复用形式,包()旨在帮助您实现它。考虑到将一组请求多路复用到一个连接上的任务,那么是的,似乎不可避免地会遇到与您正在做的事情大致一样复杂的事情。有没有关于如何可靠地做到这一点的建议?关于实现这一点的任何最佳实践(在任何其他语言中都会有助于理解)?使用您提到的
多路复用
关键字,我发现了这一点:这是由同一位作者提出的,您认为这能修复@twotwo吗?啊,太好了,我甚至没想到这个评论会有多大帮助!是的,我只是瞥了一眼那个软件包,但它看起来确实像是为了完成你在这里描述的任务;似乎值得尝试整合。@Two你能提供一个答案:)
connbuf := bufio.NewReader(remoteConn)
str, err := connbuf.ReadString('\n')
str = strings.TrimSpace(str)
if len(str) > 0 {
id, _ := strconv.Atoi(str)
conns[id] <- str
}