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;
}