C++ Server Design Boost Asio

Я скептически отношусь к своему текущему дизайну моего игрового сервера и ищу реальное руководство. В настоящее время я предварительно распределяю фиксированное количество клиентов с их собственными буферами приема в классе, предварительно выделенными. Все хорошо, пока я не встретил момент, когда при обработке пакетов мне нужно ответить обратно. Мой текущий дизайн - это предварительное выделение фиксированного количества sendbuffers, удаление одного из списка freelist без блокировки и возврат его после отправки пакета. Я хотел бы знать, правильно ли использовать список свободных буферов без блокировки, или мне нужно вызывать new/delete каждый раз, когда я отправляю новый пакет.

Текущий способ:

T_SendBufferTCP* CServer::GetFreeSendBuffer()
{
    for (int i = 0; i < SEND_BUFFER_COUNT; i++)
    {
        if (__sync_val_compare_and_swap(&pSendBuffers[i]->iOwnedCount, 0, 1) == 0)
        {
            return pSendBuffers[i];
            break;
        }
    }

    printf("No Free SendBuffers.\r\n");
    exit(0);

    return NULL;
}

0 ответов

Другие вопросы по тегам