Несколько слов о текущем проектировании и реализации
Я отправляю много запросов удаленному приложению (запущенному на другом
хост, конечно), а приложение отправляет обратно данные.
О клиенте
Клиент - это пользовательский интерфейс, который порождает отдельный поток для отправки и обработки запросов. Как только он отправляет все запросы, он вызывает Wait. И Wait будет анализировать все события, поступающие в приложение, и вызывать обратные вызовы клиента.
Ниже приведена реализация Wait.
public void Wait (uint milliseconds)
{
while(_socket.IsConnected)
{
if (_socket.Poll(milliseconds, SelectMode.SelectRead))
{
// read info of the buffer and calls registered callbacks for the client
if(_socket.IsAvailable > 0)
ProcessSocket(socket);
}
else
return; //returns after Poll has expired
}
}
Wait вызывается из отдельного потока, отвечающего за управление сетевым подключением: как входящий, так и исходящий трафик:
_Receiver = new Thread(DoWork);
_Receiver.IsBackground = true;
_Receiver.Start(this);
Этот поток создается из компонента пользовательского интерфейса приложения.
Выпуск:
клиент иногда видит задержки в обратных вызовах, даже если основное приложение отправило данные вовремя. Примечательно, что одно сообщение в опросе было отложено до тех пор, пока клиент не отключился, и внутренне я позвонил:
_socket.Shutdown(SocketShutdown.Both);
Мне кажется, что-то странное происходит в опросе
Любые предложения о том, как решить проблему или альтернативное решение?
Спасибо
пожалуйста, дайте мне знать, если что-то неясно