Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 在反向代理中响应正确的客户端_Go - Fatal编程技术网

Go 在反向代理中响应正确的客户端

Go 在反向代理中响应正确的客户端,go,Go,我正在尝试使用Go在两台服务器之间建立一个持久的TCP连接;位于本地的客户端,位于远程计算机中的服务器。客户端还向PHP脚本本地提供HTTP请求。每个请求都通过TCP连接中继到远程服务器。然后将响应发送回PHP脚本 HTTP request from .php script \ \ -----> HTTP req is relayed \ client <--------------TCP connection--------

我正在尝试使用Go在两台服务器之间建立一个持久的TCP连接;位于本地的
客户端
,位于远程计算机中的
服务器
。客户端还向
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
    }