good morning!!!!

Skip to content
Snippets Groups Projects
Forked from github / maticnetwork / bor
Source project has a limited visibility.
  • Felix Lange's avatar
    f5f042ff
    rpc: ensure client doesn't block for slow subscribers · f5f042ff
    Felix Lange authored
    I initially made the client block if the 100-element buffer was
    exceeded. It turns out that this is inconvenient for simple uses of the
    client which subscribe and perform calls on the same goroutine, e.g.
    
        client, _ := rpc.Dial(...)
        ch := make(chan int) // note: no buffer
        sub, _ := client.EthSubscribe(ch, "something")
        for event := range ch {
            client.Call(...)
        }
    
    This innocent looking code will lock up if the server suddenly decides
    to send 2000 notifications. In this case, the client's main loop won't
    accept the call because it is trying to deliver a notification to ch.
    
    The issue is kind of hard to explain in the docs and few people will
    actually read them. Buffering is the simple option and works with close
    to no overhead for subscribers that always listen.
    f5f042ff
    History
    rpc: ensure client doesn't block for slow subscribers
    Felix Lange authored
    I initially made the client block if the 100-element buffer was
    exceeded. It turns out that this is inconvenient for simple uses of the
    client which subscribe and perform calls on the same goroutine, e.g.
    
        client, _ := rpc.Dial(...)
        ch := make(chan int) // note: no buffer
        sub, _ := client.EthSubscribe(ch, "something")
        for event := range ch {
            client.Call(...)
        }
    
    This innocent looking code will lock up if the server suddenly decides
    to send 2000 notifications. In this case, the client's main loop won't
    accept the call because it is trying to deliver a notification to ch.
    
    The issue is kind of hard to explain in the docs and few people will
    actually read them. Buffering is the simple option and works with close
    to no overhead for subscribers that always listen.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.