如何为C#中的许多客户创建易于编程的服务器?

时间:2009-10-14 09:25:49

标签: c# .net remoting

我认为已经提出了类似的问题,但我找不到任何问题。请随时指出我现有的解决方案。

我会解释我的情景。我想创建一个服务器应用程序。有许多客户端(目前只有几十个,但它可以扩展到1000多个)连接到服务器(在一台机器上运行)。

每个客户端定期向服务器发送少量数据进行处理(处理速度很快)。服务器还可以定期向每个客户端发送少量数据。响应时间应该很短(<100毫秒),但不需要实时或类似的东西。

我的第一个想法是从我在VB6中编程时回来的:创建一个服务器套接字来监听传入的请求,然后为每个可能的客户端创建一个客户端套接字(单线程)。我怀疑这很好。实施沟通也很困难。

所以我想我会创建一个侦听器线程来接受新的客户端连接和一个不同的线程来实际读取客户端的传入数据。由于将有许多客户端,我不想为每个客户端创建一个线程。相反,我更喜欢使用单个线程来读取循环中的所有传入数据,然后直接处理这些数据或为不同的线程创建工作项来处理。我想这种方法可以很好地扩展。对这个想法的任何评论都是最受欢迎的。

我担心的其余问题很容易沟通。上述解决方案似乎需要手动协议,可能通过TCP发送ASCII命令。虽然工作,但我认为现在应该有更好的方法。

某些接口/代理方式似乎合理。之前我曾经使用过Java RMI。从我的理解来看,.NET Remoting也有类似的用途。 Remoting是我描述的场景(许多客户)的可行解决方案吗?还有一种我还不知道的更好的方法吗?

修改

  • 这不是局域网,而是互联网,如果重要的话。
  • 如果可能,它也应该在Linux下运行。

2 个答案:

答案 0 :(得分:4)

正如AresnMkrt指出的,你应该尝试WCF。 只需按原样使用(使用netTcpBinding,但不要忘记关闭安全性)并创建Tracer Bullet - 测量性能是否符合您的要求。

如果没有,您可以尝试调整WCF - WCF是非常可扩展的,您可以修改消息序列化以发送ASCII消息。

答案 1 :(得分:1)

您确定需要二进制协议吗?相反,您确定需要发明一个全新的协议,其中使用JSON / XML的简单RESTful服务就足够了吗? WCF可以在这方面为您提供很多帮助。