Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 您会为隧道推荐哪些插座选项?_Sockets_Tcp_Tunnel - Fatal编程技术网

Sockets 您会为隧道推荐哪些插座选项?

Sockets 您会为隧道推荐哪些插座选项?,sockets,tcp,tunnel,Sockets,Tcp,Tunnel,我正在编写一个自定义隧道(首先有一个自定义hello,然后连接变成隧道),但是速度非常慢 我想知道我能做些什么来提高速度 例如,提高使用短消息的连接速度的一种方法是禁用nagle算法(TCP_NODELAY) 对于隧道施工,你有什么建议? 如果有帮助的话,我正在隧道传输RTSP和HTTP 编辑:代码尽可能简单: int remote_fd; int local_fd; int fdmax; char buf[1 << 10]; fdset master_set, read_set;

我正在编写一个自定义隧道(首先有一个自定义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);
    }
}
int-remote\u-fd;
int local_fd;
int-fdmax;
char buf[1本地\u fd?远程\u fd:本地\u fd;
//连接远程\u fd和本地\u fd
...
而(1){
读取集合=主集合;
选择(fdmax+1,&read_set,NULL,NULL,NULL);
if(FD_ISSET(本地_FD和读取_set)){
int n=recv(本地的,本地的,本地的,本地的,本地的),0;
发送(远程_fd,buf,n,0);
}
if(FD\U ISSET(远程\U FD和读取\U set)){
int n=recv(远程故障诊断码,故障诊断码,故障诊断码(故障诊断码),0);
发送(本地_fd,buf,n,0);
}
}

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

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

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


如果您使用UDP而不是TCP,RTSP将受益匪浅,因为它是一种实时协议,并不真正关心所有内容是否正确到达。

问题可能出在您的代码中,而不是套接字选项。TCP节点延迟可能有帮助,也可能没有帮助。大型套接字和接收huffers可能有帮助。您的代码可能会引入延迟。请向我们展示一些代码

为什么你认为你的隧道会影响性能?好吧,一端是Linux。另一端也很有可能是Linux(可能是嵌入式Linux的摄像头)。我使用的是c。我明白你关于压缩的意思。但是,因为我只是隧道,我不想意识到这种程度的通信(太多代码和复杂性).关于RTSP,我明白你的意思,但我认为这些摄像头对RTSP使用TCP而不是UDP。顺便说一句,没有隧道,速度会更高。谢谢,我认为隧道是影响性能的原因,是我有一种在没有隧道的情况下检查它的方法。这样,视频加载更快(播放更好)@TomM:很好,但是谢谢,我会尝试你的建议。关于EOS-我已经在现场关闭并重新连接了插座来处理:)@TomM如果发生关机,那就不起作用了。在另一个方向的业务连接仍然是开放的,因此立即关闭它是错误的。你必须按照我上面所说的去做。