Функции асинхронного обратного вызова, вызывающие один и тот же метод stati c - PullRequest
1 голос
/ 09 февраля 2020

Каждый раз, когда клиент подключается к моему серверу, я создаю новый экземпляр класса 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? В таком случае, возможно ли создать более эффективную модель, которая будет одновременно работать с клиентами?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...