Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Najprostszy serwer potoku tworzy pojedyncze wystąpienie potoku, łączy się z jednym klientem, komunikuje się z klientem, rozłącza się z klientem, zamyka uchwyt potoku i kończy. Jednak częściej serwer potoku komunikuje się z wieloma klientami potoku. Serwer potoku może używać pojedynczego wystąpienia potoku do nawiązywania połączenia z wieloma klientami potoku, łącząc się z każdym klientem i odłączając się od każdego klienta w sekwencji, ale wydajność byłaby niska. Serwer potoku musi utworzyć wiele wystąpień potoku, aby efektywnie obsługiwać wielu klientów jednocześnie.
Istnieją trzy podstawowe strategie obsługi wielu wystąpień potoku.
- Utwórz oddzielny wątek dla każdego wystąpienia potoku. Aby zapoznać się z przykładem wielowątkowego serwera potoku, zobacz Multithreaded Pipe Server.
- Użyj nakładających się operacji, określając strukturę OVERLAPPED w funkcji ReadFile, WriteFilei ConnectNamedPipe. Aby zapoznać się z przykładem, zobacz Nazwany serwer potoku przy użyciu nakładających się operacji we/wy.
- Użyj nakładających się operacji przy użyciu funkcji ReadFileEx i WriteFileEx, które określają procedurę uzupełniania do wykonania po zakończeniu operacji. Aby zapoznać się z przykładem, zobacz Nazwany serwer potoków przy użyciu procedur uzupełniania.
Serwer potoków wielowątkowych jest najłatwiejszy do zapisu, ponieważ wątek dla każdego wystąpienia obsługuje komunikację dla pojedynczego klienta potoku. System przydziela czas procesora do każdego wątku zgodnie z potrzebami. Jednak każdy wątek używa zasobów systemowych, co jest wadą serwera potoku, który obsługuje dużą liczbę klientów.
W przypadku serwera jednowątkowego łatwiej jest koordynować operacje wpływające na wielu klientów i łatwiej jest chronić zasoby udostępnione przed równoczesnym dostępem wielu klientów. Wyzwaniem serwera jednowątkowego jest to, że wymaga koordynacji nakładających się operacji w celu przydzielenia czasu procesora do obsługi równoczesnych potrzeb klientów.