【问题标题】:Forwarding a TCP connection to another server将 TCP 连接转发到另一台服务器
【发布时间】:2021-04-14 19:55:48
【问题描述】:

假设我有两个游戏服务,一个登录服务器和一个游戏服务器。当客户端连接登录服务器进行认证时,如果认证成功,我想将它们传输到游戏服务器。这个游戏服务器是它自己在另一台主机上的服务。我将如何转发这个已建立的 TCP 连接?

我想在两台服务器之间打开一个持久连接,然后发送现有的 TCP 数据,但是我不确定在客户端与登录之间建立连接时断开客户端与登录之间的连接的后续步骤游戏服务器。我是否会向客户端发送一个数据包以建立与游戏服务器的单独连接,同时将必要的数据从登录名转发到游戏服务器?这似乎是不必要的,而且可能不安全。

我使用的语言是 rust,但抽象的答案也会有很大帮助。

【问题讨论】:

  • “那么复杂”的答案对你来说足够了吗?我看到的唯一简单方法是永远不会结束连接,只需将所有数据传输到另一台服务器。但随着时间的推移,这将成为性能杀手。我建议您找到一种更好的方法,例如使用 jwt,还请注意,如果您还没有这样做,您还应该在客户端和服务器之间加密您的数据。

标签: rust tcp connection


【解决方案1】:

您要查找的术语是“代理”。如果您只是传递数据,那么有一些工具可以帮助您完成此任务,这样您就不必做管理 TCP 级别调用的“笨蛋工作”。

Nginx can do this,可能是一个不错的起点。

stream {
    server {
        listen     12346;
        #TCP traffic will be forwarded to the specified server
        proxy_pass backend.example.com:12346;
    }
}

【讨论】:

  • 你没看懂问题
  • OP 要求一种代理连接的方法,即使这是一个坏主意。
  • OP 要求重定向已经打开的连接,该连接已经用于接收数据,与直接重定向流量完全不同。
猜你喜欢
  • 2016-01-20
  • 2017-09-05
  • 2019-12-19
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2012-06-07
相关资源
最近更新 更多