我正在编写自定义隧道(首先是自定义问候语,然后连接成为隧道),但速度很慢。
我想知道我能做些什么来提高速度。
提高使用短消息的连接速度的一种方法是禁用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);
}
}
我省略了错误处理和连接套接字的代码,使其更具可读性。
答案 0 :(得分:0)
我认为禁用nagle算法会有所帮助。您提供的信息太少,无法提供更具体的帮助。因此,其余的答案只是猜测。您需要提供隧道每端的平台/操作系统以及您正在使用的编程语言。
例如。如果压缩请求/响应,HTTP隧道将大大受益。但如果您使用的是手持设备,则会使用更多的电池。
如果您使用UDP而不是TCP,RTSP将会受益,因为它是一个实时协议,并不真正关心一切是否正常到位。
答案 1 :(得分:0)
问题可能出在代码 rathar而不是socket选项中。 TCP_NODELAY可能会有所帮助,也可能没有帮助。大插座和接收器可能会有所帮助。您的代码可能会引入延迟。向我们展示一些代码。