How to configure Node to handle heavy packet loss?

I’m writing a real-time system application that communicates in a local p2p network where packet loss is expected, up in the range of 50%. I’ve tried looking into :net_kernel.setopts/2, but I haven’t been able to find any way to make GenServer.multi_call/4 more “aggressive” in pushing resending packets if it doesn’t receive a quick reply during simulated packet loss tests. A 3 second multi_call seem to have a reliability of around ~70% when testing locally with 50% packet loss.

What options do I have to make multi_call more reliable? Is refactoring to abcast/3 the only alternative?

  • use udp
  • gossip-based approach pg or partisan
  • Distributed Pub-Sub
  • abcast asynchronous broadcast
  • retry mechanism with exponential backoff
  • ack msg

You might also need to persist msg sent and its ack in ets , for 100% success, or remove nodes from ack state if the ack is received from that node.