Какие варианты сокетов вы бы порекомендовали для туннелей? - PullRequest
0 голосов
/ 13 апреля 2011

Я пишу собственный туннель (сначала настраиваемый привет, а затем соединение становится туннелем), но он довольно медленный.

Мне интересно, могу ли я что-нибудь сделать для увеличения скорости.

Одним из способов увеличения скорости для соединений, которые, например, используют короткие сообщения, было бы отключение алгоритма Nagle (TCP_NODELAY).

Что бы вы порекомендовали для туннелирования? Я туннелирую RTSP и HTTP, если это поможет.

РЕДАКТИРОВАТЬ: код настолько прост, насколько это возможно:

int remote_fd;
int local_fd;
int fdmax;
char buf[1 << 10];

fdset master_set, read_set;
FD_ZERO(&master_set);
FD_ZERO(&read_set);
FD_SET(remote_fd, &master_set);
FD_SET(local_fd, &master_set);

fdmax = remote_fd > local_fd ? remote_fd : local_fd;

//Connect both remote_fd and local_fd
...

while (1) {
    read_set = master_set;
    select(fdmax + 1, &read_set, NULL, NULL, NULL);
    if (FD_ISSET(local_fd, &read_set)) {
        int n = recv(local_fd, buf, sizeof(buf), 0);
        send(remote_fd, buf, n, 0);
    }
    if (FD_ISSET(remote_fd, &read_set)) {
        int n = recv(remote_fd, buf, sizeof(buf), 0);
        send(local_fd, buf, n, 0);
    }
}

Я опустил обработку ошибок и код, соединяющий сокеты, чтобы сделать его более читабельным.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2011

Возможно, проблема в вашем коде , чем в параметрах сокета. TCP_NODELAY может или не может помочь. Большие розетки и приемники могут помочь. Ваш код может вводить задержку. Покажите нам код.

0 голосов
/ 15 апреля 2011

Я не думаю, что отключение алгоритма nagle сильно помогло бы.Вы предоставляете слишком мало информации, чтобы оказать более конкретную помощь.Следовательно, остальные ответы - только догадки.Вам необходимо указать, на какой платформе / ОС работает каждый конец туннеля и какой язык программирования вы используете.

Например.HTTP-туннелирование очень выиграет, если вы сожмете запросы / ответы.Но это потребовало бы гораздо больше энергии, если вы работаете с карманным устройством.

RTSP выиграет, если вы будете использовать UDP вместо TCP, поскольку это протокол реального времени, который не заботится о том, что все идет правильно.

...