Помощь с управляемым событиями TCP-сервером

Я работаю над «системой приложений», где мне также нужно создать серверное приложение. Я работаю на C # (.NET 4.0 Сервер будет в основном собирать данные от различных POS-приложений / клиентов (которых должно быть около 50-100, но сервер должен иметь возможность обрабатывать также около 200-300 клиентов). От одного клиента сервер, вероятно, получит около 1 КБ примерно 100 раз в день. Сервер в основном должен принимать данные, расшифровать и сохранить на диск. Он также должен проверять наличие изменений в конкретном каталоге, чтобы отправлять новые конфигурации клиентам, что не должно происходить очень часто.

Я новичок в C # и серверном программировании, поэтому, пожалуйста, потерпите меня. Я думал об использовании потоковых и асинхронных методов (есть хороший пример, использующий это в книге «C # в двух словах»). Но я потратил некоторое время на поиски лучшего решения и нашел это. Но в моем случае многопоточность приносит больше проблем, чем преимуществ. Так я подумал даже о управляемом сервере. «Единый процесс, обрабатывающий каждое событие (принятое соединение, данные, доступные для чтения, возможность записи клиенту, ...) при обратном вызове». из « что такое событийный веб-сервер ». Я считаю, что это лучшее решение моей проблемы.

Но я понятия не имею, как это кодировать, Я не смог найти никаких примеров о серверах, управляемых событиями. Насколько я понимаю, я должен создать один поток (+ 1 для GUI), затем создать прослушиватель 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
   ...
  }

, но это не связано с событиями и расходует ресурсы процессора. Сервер не будет очень активным, поэтому я хотел бы сделать его максимально эффективным.

Некоторые примеры действительно помогут.

Спасибо за ваше время и ответы.

ps Могу ли я использовать только один порт для всех клиентов?

РЕДАКТИРОВАТЬ: Чтобы уточнить, я хочу закодировать сервер, управляемый событиями, но я не знаю, как это сделать, поэтому я просто привел пример того, что я знаю (опрос клиентов).

6
задан Community 23 May 2017 в 12:14
поделиться