/ / Jak dystrybuować żądania z Listenera TCP - c #, .net, tcpclient, tcplistener

Jak rozsyłać żądania od odbiornika TCP - c #, .net, tcpclient, tcplistener

ja używam TcpListener (Clase) przykład https://msdn.microsoft.com/es-es/library/system.net.sockets.tcplistener(v=vs.110).aspx w celu przetworzenia żądań TCP.

Ale wydaje się, że jest to jednocześnie TCP Listener przyjmie wiele żądań, które powinny zostać przetworzone później w kilku Web Services razem i wynik musi zostać zwrócony do TCP client.

Mam na myśli następujące czynności:

  1. Uzyskaj obiekt strumienia do odczytu i zapisu NetworkStream stream = client.GetStream(); i zapisz go w specjalnej klasie kontenerów.

  2. Umieść tę klasę w specjalności Queue klasa pomocnicza taka jak ta C #: Wyzwalanie zdarzenia, gdy obiekt zostanie dodany do kolejki.

  3. Gdy Queue zostało zmienione zaimplementowane zdarzenie pożaru, aby asynchronicznie przetworzyć następny element kolejki Task.

  4. W granicach Task komunikować się z Web Servicesi wyślij odpowiedź na TCP Client.

Proszę, daj mi znać, że ta architektura jest niezbędna i może rozwiązać wiele próśb TCP Listener.

Odpowiedzi:

1 dla odpowiedzi № 1

Korzystanie z kolejki to zdecydowanie realny pomysł, alezastanów się, jaki jest cel. Ogranicza liczbę żądań, które można przetwarzać równolegle. Może być konieczne ograniczenie tego w kilku przypadkach, a najczęściej jest tak, że każde przetwarzanie żądania wykonuje pracę związaną z CPU (ciężkie obliczenia). Wtedy twoja zdolność do równoległego przetwarzania wielu z nich jest ograniczona i możesz użyć podejścia kolejek.

W twoim żądaniu przetwarzanie wykonuje pracę związaną z IO(oczekiwanie na zakończenie żądania internetowego). Nie zużywa to zbyt wielu zasobów serwera i można przetwarzać wiele takich żądań równolegle, więc najprawdopodobniej w twoim przypadku nie jest potrzebna kolejka.

Nawet jeśli używasz kolejki, bardzo rzadko jest to przydatneprzetwarzaj tylko jeden element na raz. Zamiast tego, kolejka procesów z wątkami X (gdzie X ponownie zależy od tego, czy praca jest związana z CPU lub IO, dla CPU może być w porządku z X = liczba rdzeni, z IO potrzebujesz więcej). Jeśli użyjesz zbyt mało wątków do przetworzenia kolejki - Twoi klienci będą oczekiwać więcej za zasadniczo nic, a nawet mogą zawieść przez limit czasu.


2 dla odpowiedzi nr 2

Polecam ci netmq. Zobacz https://github.com/zeromq/netmq