Я работаю над «системой приложений», где мне также нужно создать серверное приложение.Я работаю в 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 Могу ли я использовать только один порт для всех клиентов?
РЕДАКТИРОВАТЬ: Чтобы уточнить, я хочу кодировать сервер, управляемый событиями, но я не знаю, как, таким образом,Я только что привел пример того, что я знаю (опрос клиентов).