對於大多數常見的使用模式,保持連接客戶端的List
就足夠了。主要興趣點將決定:什麼?
對於許多應用程序來說,純粹的TCP功能並不方便使用,因此您需要在其上面使用一層,將流轉換爲更像消息隊列的消息隊列,從中可以抽取完整的自包含「消息」這些消息的格式取決於您的應用程序。
我挖掘了一個老的項目,這是一個客戶端 - 服務器配置,其中多個客戶端連接到服務器並提供遠程控制功能。在該項目中的服務器保持一個List<ConnectedClient>
其中:
// This is the whole actual class
private class ConnectedClient
{
public TcpMessageConnection Connection { get; private set; }
public bool ConnectedEventRaised { get; set; }
public ConnectedClient(TcpMessageConnection connection)
{
this.Connection = connection;
}
}
而且TcpMessageConnection
樣子:
// Only class outline shown
public class TcpMessageConnection
{
private readonly MessageStream messageStream; // another custom class
private readonly TcpClient tcpClient;
public EndPoint RemoteEndPoint { get; private set; } // who connected here?
public MessageReader MessageReader { get; } // messageStream.Reader
public MessageWriter MessageWriter { get; } // messageStream.Writer
public bool IsCurrentlyDisconnecting { get; private set; }
public void Close();
}
與
MessageReader
一起和MessageWriter
(其真正的做到了繁重的),這是足以實施async-該服務器在單個線程上爲多個客戶端提供服務。
來源
2012-09-27 23:14:23
Jon
這裏可能使用'Dictionary'或'List'。 '列表'應該足夠了。 –
Matthew
@Matthew是的,但我的意思是,只是列表就足夠了?除了TcpClient之外,我還應該保留其他任何信息,以便創建我的連接客戶端列表嗎?我只是在尋找一些關於如何去做的很好的方法的參考 – Guapo
這取決於你感興趣的信息。如果你關心的只是連接的數量並且能夠廣播消息,那麼一個簡單的TcpClient列表就足夠了。 – Matthew