代码之家  ›  专栏  ›  技术社区  ›  viraptor

多次绑定到同一端口

  •  1
  • viraptor  · 技术社区  · 14 年前

    我需要的唯一选择是连接的自动负载平衡。

    6 回复  |  直到 14 年前
        1
  •  4
  •   Adam Byrtek    14 年前
        2
  •  3
  •   Community miroxlav    7 年前
        3
  •  2
  •   srparish    14 年前

    不幸的是,我不相信这是可能的。

        4
  •  1
  •   Nikolai Fetissov    14 年前

    INADDR_ANY )-那会是个好主意 . 唯一的例外是 bind(2) / fork(2) 跳舞,你已经说过了。

    也就是说,如果计算机上有多个网络接口(或在单个接口上设置IP别名),则可以将一个套接字绑定到具有相同端口的每个IP地址。只要记住设置 SO_REUSEADDR 套接字选项介于 socket(2) 绑定(2) 电话。

    • 在将源IP映射到计算机/端口池的防火墙上执行,
    • 在一个流程中进行代理/预处理,在一个流程池中进行实际工作,
    • 使用 正如@Hasturkun所说。
        5
  •  1
  •   rogerdpack    8 年前

    对于内核为3.9的linux来说似乎是“新的可能” http://freeprogrammersblog.vhex.net/post/linux-39-introdued-new-way-of-writing-socket-servers/2

    通过使用sou重用端口

        6
  •  0
  •   kagali-san    14 年前

    对于高度专业的任务变体,在Linux上,您可以使用netfilter的队列模块将传入的数据包映射到进程中。然后可以删除/修改/删除它们。

    prog1: checks if packet came from IP xxx.xxx.xxx. Match? Catch packet.
    prog2: checks if prog3 busy. Match? Catch packet.
    prog3: checks packet's origin...
    

    然而,这只会产生大约20Kb的代码来处理数据包,并且TCP/IP堆栈将无法长期生存(big traffic==big error)。

    这是一个深奥的解决方案,只需创建一个调度程序进程来分叉其他进程。关注nginx、apache2、cometd或任何Perl的异步TCP模块来理解这个想法。