0

カスタムトンネルを作成しています(最初にカスタムhelloがあり、次に接続がトンネルになります)が、かなり遅いです。

スピードを上げるために何かできることはないかと思います。

たとえば、短いメッセージを使用する接続の速度を上げる1つの方法は、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アルゴリズムを無効にしてもあまり役に立たないと思います。提供する情報が少なすぎるため、具体的なヘルプを提供できません。したがって、残りの答えは推測にすぎません。トンネルの両端がオンになっているプラ​​ットフォーム/OSと、使用しているプログラミング言語を指定する必要があります。

例えば。リクエスト/レスポンスを圧縮すると、HTTPトンネリングに大きなメリットがあります。ただし、ハンドヘルドデバイスを使用している場合は、より多くのバッテリーを使用します。

RTSPは、TCPの代わりにUDPを使用した場合に役立ちます。これは、すべてが適切に到着するかどうかを実際には気にしないリアルタイムプロトコルだからです。

于 2011-04-15T07:06:20.820 に答える