У меня есть Windows служба, которая выполняет некоторые задачи. Мне нужно добавить некоторые сетевые функции в список задач.
Вот как будет выглядеть сетевой лог c:
+-------------------+ +---------------+
| | send request | |
| | for some data | |
| | <--------------------------------------------- | |
| | | |
| | process request | Client |
| Windows Service | | Application |
| | send response | |
| | ---------------------------------------------> | |
| | | |
| | process response | |
+-------------------+ +---------------+
ПРИМЕЧАНИЕ: Там может быть несколькими клиентскими приложениями, запрашивающими данные одновременно.
ПРИМЕЧАНИЕ: Каждое клиентское приложение может отправлять несколько запросов данных одновременно.
ПРИМЕЧАНИЕ: The * Служба 1052 * и клиентское приложение могут находиться в одной и той же сети или в разных сетях.
Вот базовая c схема службы Windows:
class Processor : System.ServiceProcess.ServiceBase
{
private System.Timers.Timer Timer1 = null;
private System.Timers.Timer Timer2 = null;
private System.Timers.Timer Timer3 = null;
protected override void OnStart(string[] args)
{
Timer1 = new System.Timers.Timer();
Timer1.Interval = ...;
Timer1.AutoReset = true;
Timer1.Elapsed += new ElapsedEventHandler(...);
Timer1.Start();
Timer2 = new System.Timers.Timer();
Timer2.Interval = ...;
Timer2.AutoReset = true;
Timer2.Elapsed += new ElapsedEventHandler(...);
Timer2.Start();
Timer3 = new System.Timers.Timer();
Timer3.Interval = ...;
Timer3.AutoReset = true;
Timer3.Elapsed += new ElapsedEventHandler(...);
Timer3.Start();
// I was thinking of creating a new Task (System.Threading.Tasks.Task) or Timer (System.Timers.Timer) here to handle the networking-related logic.
}
protected override void OnStop()
{
Timer1.Stop();
Timer1.Close();
Timer2.Stop();
Timer2.Close();
Timer3.Stop();
Timer3.Close();
}
}
Я был читая документацию Microsoft по сетевому программированию , но я до сих пор не знаю, какой класс лучше всего подойдет для моей ситуации.
Вот классы, о которых я думал:
Классы TcpListener и TcpClient являются оболочками класса Socket. Кажется, они скрывают многие детали реализации и облегчают понимание кода. Класс Socket кажется ошеломляющим по количеству предоставляемых функций, но он может обрабатывать нескольких клиентских подключений . Может ли TcpListener обрабатывать несколько клиентов или он может прослушивать только по одному за раз?
Какой класс сети подойдет для моей ситуации? Как я могу гарантировать, что запросы будут обрабатываться быстро, а также гарантировать, что задачи, не связанные с сетью, будут продолжаться без блокировки?