Каждый раз, когда клиент подключается к моему серверу, я создаю новый экземпляр класса ClientObject. Этот новый экземпляр будет начинаться с конструктора:
public ClientObject(TcpClient _Socket, int _ConnectionID)
{
if (_Socket == null) return;
Socket = _Socket;
ConnectionID = _ConnectionID;
Socket.NoDelay = true;
Socket.ReceiveBufferSize = 4096;
Socket.SendBufferSize = 4096;
myStream = Socket.GetStream();
ReceiveBuffer = new byte[4096];
myStream.BeginRead(ReceiveBuffer, 0, Socket.ReceiveBufferSize, ReceiveCallback, null);
}
После получения некоторого сообщения от соответствующего клиента вызывается метод асинхронного обратного вызова ReceiveCallback:
private void ReceiveCallback(IAsyncResult result)
{
int readBytes = myStream.EndRead(result);
if (readBytes <= 0)
{
CloseConnection();
return;
}
byte[] newBytes = new byte[readBytes];
Buffer.BlockCopy(ReceiveBuffer, 0, newBytes, 0, readBytes);
ServerHandleData.HandleData(ConnectionID, newBytes);
myStream.BeginRead(ReceiveBuffer, 0, Socket.ReceiveBufferSize, ReceiveCallback, null);
}
Теперь важная часть здесь это строка ServerHandleData.HandleData(ConnectionID, newBytes);
(HandleData - это метод stati c). Давайте предположим, что как минимум 2 клиента отправили сообщения. Тогда этот метод stati c будет вызываться более одного раза. В этом случае мы будем работать в нескольких потоках? Или каждый вызов будет ждать, пока предыдущий завершит sh? В таком случае, возможно ли создать более эффективную модель, которая будет одновременно работать с клиентами?
Спасибо!