对于最常见的使用模式,保持一个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
and MessageWriter
(真正的繁重工作)一起,这足以实现一个基于异步的服务器,该服务器在单个线程上为多个客户端提供服务。