Michael,

Thanks for the reply, I tried passing those options thusly:

var sClient = new services.SClient('localhost:50051', 
grpc.credentials.createInsecure(), {
  "grpc.http2.min_time_between_pings_ms": 100,
  "grpc.http2.max_pings_without_data": 0
});

I connected to the server for 10 seconds, I observed (via wireshark http2) 
DATA frames from an rpc call, but no PING frames. I had expected to see 
about 200 PING frames: 10 seconds * 10 per second * 2 (req and rep)

To verify the ability to observe PING frames I ran the following go code 
against the same server (nodejs + gRPC)

package main

import (
"context"
"fmt"
"log"
"net"

"golang.org/x/net/http2"
)

func main() {
fmt.Println("PING")
tp := http2.Transport{}

log.Println("dialing server")
conn0, err := net.Dial("tcp", "localhost:50051")
if err != nil {
log.Fatal(err)
}

conn, err := tp.NewClientConn(conn0)
if err != nil {
log.Fatal(err)
}

for i := 0; i < 2; i++ {
log.Println("PING", i)
if err := conn.Ping(context.TODO()); err != nil {
log.Fatal(err)
}
}
}

I observed 4 PING frames as expected.

Am I doing something wrong?

On Thursday, February 16, 2017 at 8:25:12 PM UTC-6, Michael Lumish wrote:
>
> You should have no problems with this approach, but it also shouldn't be 
> necessary. gRPC already uses HTTP2 pings to keep channels alive while 
> they're otherwise idle. If you're still seeing disconnects, there are a 
> couple of channel options you can set (they go into an object in the third 
> argument to the Client constructor). The list of them is defined here: 
> https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/grpc_types.h#L148.
>  
> Specifically, modifying "grpc.http2.min_time_between_pings_ms" 
> and "grpc.http2.max_pings_without_data".
>
> In addition, gRPC automatically reconnects dropped TCP connections, so if 
> your channel is idle with no ongoing calls, you shouldn't even notice 
> connection drops.
>
> On Tue, Feb 14, 2017 at 7:36 PM Francesco Lazzarino <[email protected] 
> <javascript:>> wrote:
>
>> Hi,
>>
>> The current node.js module doesn't allow one to pass a Channel object to 
>> build a client, but it does allow one to access a channel via 
>> grpc.getClientChannel(…) and .$channel on a client object.
>>
>> In lieu of an exposed interface to pass a connection or channel, I tried 
>> out the following hack to allow two clients to share the same channel.
>>
>> function combineChannels(aClient, bClient) {
>>     var aChan = grpc.getClientChannel(aClient);
>>     var bChan = grpc.getClientChannel(bClient);
>>     if (aChan.getTarget() != bChan.getTarget()) {
>>         throw "different targets: " + " (a) " + aChan.getTarget() + "; 
>> (b) " + bChan.getTarget();
>>     }
>>
>>     if (aChan.getConnectivityState() != 0) {
>>         throw "bad connectivity state (a): " + 
>> aChan.getConnectivityState();
>>     }
>>
>>     if (bChan.getConnectivityState() != 0) {
>>         throw "bad connectivity state (b): " + 
>> bChan.getConnectivityState();
>>     }    
>>
>>     bChan.close();
>>     bClient.$channel = aChan;
>> }
>>
>> Observing with nettop (macOS) shows only 1 connection when hack is in 
>> use, and 1 per client otherwise. It seems to work as expected, but is any 
>> danger in doing so? Is there a better way to accomplish this in node.js?
>>
>>
>> FWIW my goal is to have a healthcheck client keep the TCP socket alive in 
>> case a LB or FW wants to close idle-long-running connections.
>>
>> Thanks in advance,
>>
>> – Franco
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "grpc.io" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/grpc-io.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/grpc-io/a5f6c9ea-48e4-4d68-a5ab-322c55c15f21%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/grpc-io/a5f6c9ea-48e4-4d68-a5ab-322c55c15f21%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/bc92e3c4-b513-419e-bc54-0b7fd27522e7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to