2013-02-26 88 views
0

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

+0

实际套接字连接是绑,使他们的机器,但你可以在仲裁连接的抽象和保留一份清单,说明谁在节点宕机时获得了可以重新分配的内容。 – 2013-02-26 21:14:27

+0

当客户端关闭时客户端连接迁移的想法非常奇怪。也许你会在故障转移群集中这样做,但这听起来像是在谈论其他事情。 – bmm6o 2013-02-27 01:06:38

回答

0

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

如果您想了解如何与他们一起详细工作,阅读Berkely Sockets大概是值得的。

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

让我知道如果这就是你的想法 - 我不想太过分,如果你想到别的东西。

0

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

你应该看看了负载均衡的一般架构,这是你想要完全是我想

相关问题