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

时间:2014-08-02 03:49:36

标签: go

我正在尝试使用Go在两台服务器之间构建持久的TCP连接;在本地驻留的client和远程计算机中的server。客户端还在本地为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

对于并发连接,发送到远程服务器和从远程服务器返回的请求不同步,即请求#1的响应可以发送到请求#2。

我目前的解决方案

我创建了map个频道,这些频道由每个HTTP请求的唯一ID标识。此唯一ID在TCP请求中传递给服务器,并与响应一起发回。客户端在响应中解析此ID并将其发送到阵列中的相应通道。 conns是可用渠道的map,而唯一ID是整个回复,或str

的过度简化代码
    connbuf := bufio.NewReader(remoteConn)  
    str, err := connbuf.ReadString('\n')
    str = strings.TrimSpace(str)
    if len(str) > 0 {
        id, _ := strconv.Atoi(str)
        conns[id] <- str
    }

问题

是否有更优雅的内置方法来实现这一点 - 即使是并发请求,也确保对本地PHP脚本的请求和响应是正确的?

1 个答案:

答案 0 :(得分:1)

这就像kouton一样自我回答,但使用单一的&#34;后端&#34;连接(在本地服务器和远程服务器之间)以服务多个&#34;前端&#34;连接(在本地PHP和本地服务器之间)是多路复用的一种形式,muxado包(video of a talk)旨在帮助您实现它。