rsocket-kotlin icon indicating copy to clipboard operation
rsocket-kotlin copied to clipboard

Provide rSocket `path` or some `id` in the `reconnectable` and `interceptors` callbacks

Open vmalykhin opened this issue 1 year ago • 2 comments

Is there an easy way to know the current RSocket instance by path (url or any other tag like id or hash) when processing errors in the reconnectable {...} block?

Android use case: Ktor client creates a few instances of RSockets by ktorClient.rSocket(host, path, secure = true)with different path and keeps these sockets alive during app session. Then after the disconnect/reconnect depending on business logic, the client might want to reconnect some socket instance immediately, but other sockets should be reconnected a bit later to prevent network overloading (say, 5-10 seconds later) or should not be reconnected at all.

I bit of pseudo code:

reconnectable { cause, attempt -> // no way to know on what exact rSocket instance it called?
  if (myInternalLogicHelper.isHighPriorityInstance(rSocket)) {
    true // reconnects now
  } else {
    delay(5000) // delay before next attempt
    true // or even `false` to not reconnect at all after error
  }
}

Also looks like there is no relation between initial RSocket created by ktorClient.rSocket(...) and rSocket object received in  interceptors -> forRequester. Does RSocket URL (path) have public access somewhere?

Thanks in advance!

vmalykhin avatar Nov 18 '24 18:11 vmalykhin

Hey, unfortunately, there is no easy way currently. Do you think, that may be alternatively adding ability to configure reconnectable logic on call size will help here? E.g something like:

ktorClient.rSocket {
  reconnectable { ... }
}

Currently, reconnecting functionality was implemented rather ad-hoc and needs redesign and should be aligned with potential client-load-balancing feature.

Does RSocket URL (path) have public access somewhere?

Not, but there are related issues: #187 and #231. There is no design for this at this moment

whyoleg avatar Nov 26 '24 17:11 whyoleg

Thanks for the feedback. Yeah, putting reconnectable declaration somewhere in "create new rsocket" call would help.

vmalykhin avatar Nov 26 '24 19:11 vmalykhin