gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:17:05 28 4
gpt4 key购买 nike

我正在尝试使用 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。

我目前的解决方案

我已经为每个 HTTP 请求创建了一个由唯一 ID 标识的 channel 的 map。此唯一 ID 在 TCP 请求中传递给服务器,并与响应一起发回。客户端在响应中解析这个ID,发送到数组中对应的channel。过于简化的代码,其中 conns 是可用 channel 的 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 脚本的请求和响应即使是并发请求也是正确的?

最佳答案

这与 kouton 的 self 回答一样多,但使用单个“后端”连接(在本地服务器和远程服务器之间)来服务多个“前端”连接(在本地 PHP 和本地服务器)是一种多路复用的形式,muxado包 ( video of a talk) 旨在帮助您实现它。

关于go - 在反向代理中响应正确的客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091480/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com