我正在开发一个“应用程序系统”,我还需要制作一个服务器应用程序。我正在使用 C# (.NET 4.0)。服务器将主要从不同的 POS 应用程序/客户端收集数据(应该在 50-100 左右,但服务器也应该能够处理大约 200-300 个客户端)。从单个客户端,服务器每天可能会收到大约 100 倍的大约 1KB 数据。服务器主要需要接受数据,解密并存储到磁盘。它还应该检查特定目录中的更改,以便向客户端发送新配置,这不应该经常发生。
我对 C# 和服务器编程很陌生,所以请多多包涵。我考虑过使用线程池和异步方法(在“C# in a nutshell”一书中有一个很好的例子)。但是我花了很多时间寻找最佳解决方案,我发现了这一点。但就我而言,多线程带来的问题多于好处。因此,我甚至想到了驱动服务器。“单个进程,在回调中处理每个事件(接受的连接、可读取的数据、可以写入客户端……)。” 来自“什么是事件驱动的 Web 服务器”。我发现这是解决我的问题的最佳方法。
但我不知道如何编码,我找不到任何关于事件驱动服务器的例子。据我了解,我应该创建一个线程(GUI + 1),然后创建一个 TCP 侦听器,然后以某种方式创建事件,以便当 TCP 侦听器可以接受客户端时,事件会触发并唤醒服务器,当数据从客户端读取将可用它会唤醒服务器。
请帮我编写代码,我完全迷路了。我知道我怎么能做到这一点
while(true)
{
check if client wants to connect
accept client and add it to client list
iterate through client list and check if anyone is sending data ...
accept data and store it
...
}
但这不是事件驱动的,而是在浪费 CPU。服务器不会很活跃,所以我想让它尽可能高效。
一些例子真的很有帮助。
感谢您的时间和回答。
ps 我可以为所有客户端使用一个端口吗?
编辑:为了澄清,我想编写一个事件驱动的服务器,但我不知道如何,因此我只是举了一个我知道的例子(客户端轮询)。