4

接続サーバーの簡単なスクリプト:

#include "hiredis.h"
int main(void) {
    int fd;

    unsigned int j;
    redisReply *reply;
    reply = redisConnect(&fd, "test.com", 6379);

    if (reply != NULL) {
        printf("Connection error: %s", reply->reply);
        exit(1);
    }

    reply = redisCommand(fd,"PING");
    printf("PONG: %s\n", reply->reply);
    freeReplyObject(reply);
}

サーバーが利用可能な場合 - すべて正常です。そうでない場合は、長い一時停止があります。たとえば、待機時間を2秒に短縮するにはどうすればよいですか?

4

2 に答える 2

1

redisについてはよくわかりません。しかし、内部の redisConnect は基本的に、ブロックしている fd で connect() を呼び出しているだけだと思います。

したがって、 setsockoptを使用して事前にタイムアウトを設定してみてください:

struct timeval timeout;
timeout.tv_usec = 0;
timeout.tv_sec = 2;
setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (void *)&timeout, sizeof(timeout));

これにより、送信タイムアウトが 2 秒に設定されます。受信については、基本的に同じことを行います。

乾杯、

于 2010-11-29T06:38:24.400 に答える
1

接続タイムアウトを認識するように、hiredis ライブラリとanetTcpGenericConnect関数を変更する必要があります。ここにそれを行う方法の例があります。

于 2010-09-28T22:02:39.843 に答える