【问题标题】:C# Passing Socket Connections between computersC#在计算机之间传递套接字连接
【发布时间】:2013-02-12 11:25:08
【问题描述】:

我正在寻找一种简单的方法来模拟仲裁申请以进行测试。这个想法是创建三个独立的节点(在三台不同的计算机上),这些节点将作为我正在测试的 C# 服务器套接字的客户端工作。假设我正在尝试建立 4 个客户端-服务器连接,我希望仲裁器随机确定哪个节点获得哪些连接。如果其中一个节点死亡(应用程序已关闭),我希望仲裁器将其连接传递给另一个节点。当节点重新打开时,我希望仲裁器重新分配连接。任何链接或示例代码都会非常有帮助。

【问题讨论】:

  • 实际的套接字连接与创建它们的机器相关联,但您可以在仲裁器中抽象出一个连接,并记录谁获得了什么,然后在节点发生故障时重新分配下来。
  • 客户端宕机时客户端连接迁移的想法很奇怪。也许您会在故障转移集群中这样做,但听起来您在谈论其他事情。

标签: c# sockets


【解决方案1】:

套接字连接不是这样工作的——它们是在两台机器之间创建的。好消息是创建新连接的成本并不高。

如果您想详细了解如何使用它们,可能值得阅读 Berkely Sockets

除非您的意思是您不关心实际的连接对象,而是关心连接的总数。在这种情况下,您可以使用SemaphoreSemaphoreSlim 来控制连接总数。这将允许您随机分配连接,直到达到最大数量。然后,当连接丢失时,您再次重新分配,直到信号量被最大化;当新客户端连接时,您可以执行相反的过程 - 关闭与随机当前客户端的连接并为新客户端打开新连接,直到数量达到您的喜好。

让我知道你是否有这样的想法 - 如果你正在考虑其他事情,我不想深入探讨。

【讨论】:

    【解决方案2】:

    您不能真正在计算机之间“传递”套接字。创建它们时,TCP/IP 堆栈会分配各种无法传输的设置,例如 TCP 序列号等。但是,您可以做的是让您的“仲裁者”在所有传入连接中保持活跃。然后,仲裁器将为您的节点创建另一个套接字,以便充当两者之间的代理。

    你应该查一下负载均衡的通用架构,我觉得这正是你想要的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2015-05-31
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多