0

我正在编写一个自定义隧道(首先有一个自定义的 hello,然后连接变成了一个隧道),但是速度很慢。

我想知道是否有什么可以提高速度的方法。

例如,提高使用短消息的连接速度的一种方法是禁用 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);
    }
}

我省略了错误处理和连接套接字的代码以使其更具可读性。

4

2 回答 2

0

问题可能出在您的代码中,而不是套接字选项。TCP_NODELAY 可能有帮助,也可能没有帮助。大型套接字和接收缓冲区可能会有所帮助。您的代码可能会引入延迟。给我们看一些代码。

于 2011-04-15T08:09:57.237 回答
0

我不认为禁用 nagle 算法会有多大帮助。您提供的信息太少,无法提供更具体的帮助。因此,其余的答案只是猜测。您需要提供隧道的每一端所在的平台/操作系统以及您使用的编程语言。

例如。如果您压缩请求/响应,HTTP 隧道将大大受益。但是,如果您使用的是手持设备,那将使用更多的电池。

如果您使用 UDP 而不是 TCP,RTSP 会受益,因为它是一个实时协议,并不真正关心一切是否正确到达。

于 2011-04-15T07:06:20.820 回答