Ein paar Worte über einen laufenden Entwurf und die ImplementierungVernetzungsdesign; Socket-Kommunikation unter Verwendung von Polling
ich viele Anfragen an die Remote-Anwendung sende (läuft auf einer anderen Host, natürlich), und die Anwendungsdaten zurückzuschicken.
Über Client
Client ist eine Benutzeroberfläche, die einen separaten Thread laichen die Anträge einzureichen und zu verarbeiten. Sobald alle Anforderungen gesendet wurden, wird Wait aufgerufen. Und das Warten analysiert alle Ereignisse, die von der App kommen, und ruft die Callbacks des Clients auf.
Unten ist die Implementierung von 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
}
}
Die Warten wird aus einem separaten Thread genannt, verantwortlich für die Verwaltung von Netzwerkverbindung: sowohl eingehender als auch ausgehender Datenverkehr:
_Receiver = new Thread(DoWork);
_Receiver.IsBackground = true;
_Receiver.Start(this);
Dieser Thread aus UI-Komponente der Anwendung erstellt wird.
Die Frage:
Client manchmal Verzögerungen bei den Rückrufen sieht, obwohl Hauptanwendung die Daten rechtzeitig gesendet hat. Bemerkenswert ist, wurde eine die Nachricht in der Abstimmung verzögert, bis ich Client getrennt und intern aufgerufen I:
_socket.Shutdown(SocketShutdown.Both);
Ich denke, etwas flippig ist in den Poll
Vorschläge, wie geschieht das Problem zu beheben oder eine alternative Problemumgehung?
Dank
lassen Sie es mich wissen, wenn etwas
@Adam Devis - vielen Dank für die Korrektur der Rechtschreibung im Titel. –