Несколько соединений TCP против одного соединения

0

Я разрабатываю Data Distributor (например, генерирую произвольное число), где он будет обслуживать несколько клиентов.

Клиент C сначала отправляет список номеров, в которых он заинтересован DD по TCP, и прослушивает данные по UDP. Через некоторое время (несколько минут) клиент может обновить свой список подписки, отправив больше номеров в DD.

Я могу это сделать двумя способами.

ПЕРВЫЙ:

New_Client_Connected_Thread(int sock_fd)
{
    --Get Subscription
    --Add to UDP Publisher List
    --close(sock_fd)
}

Каждый раз, когда клиент хочет подписаться на новый набор данных, он установит новое TCP-соединение.

ВТОРОЙ:

New_Client_Connected_Thread(int sock_fd)
    {
        while(true)
        {
            --wait for new subscription list
            --Get subscription
            --Add to UDP Publisher List.

        }
    }

Здесь потребуется только одно TCP-соединение на одного клиента.

Однако, если клиент не отправляет новый запрос, Client_Thread будет ждать ненужного в течение длительного времени.

Учитывая, что мой Дистрибьютор данных будет обслуживать множество клиентов, которые из них, по-видимому, являются эффективным способом?

Теги:
tcp

1 ответ

2
Лучший ответ

Libevent или libev, который поддерживает цикл, управляемый событиями, вероятно, более подходит для части TCP этого.

Вы можете избежать потоковой передачи и иметь один цикл для части TCP, чтобы добавить своих клиентов в список издателей. Libevent очень эффективен при управлении партиями и множеством подключений и разрывов сокетов в секунду и используется такими вещами, как Tor (луковый маршрутизатор)

Похоже, что TCP-соединение в вашем приложении больше связано с соединением "Control Plane", и, следовательно, оно, вероятно, будет зависеть от того, как часто ваши клиенты должны "контролировать" ваш сервер, который собирается принять решение о том, следует ли оставить сокет открытым или закрыть его после контроля. Имейте в виду, что одновременное сохранение тысяч TCP-соединений постоянно открывает его ресурс ядра на хосте, но при других подключениях открытия и закрытия все время вводит некоторую задержку из-за времени настройки соединения.

См. Https://github.com/libevent/libevent/blob/master/sample/hello-world.c на примере сервера libevent TCP.

Поскольку вы кодируете в C++, вам, вероятно, будет интересна оболочка http://llucax.com.ar/proj/eventxx/ для libevent

Ещё вопросы

Сообщество Overcoder
Наверх
Меню