Thank you for the feedback. I am still trying to find a non-effect based API. Did not find anything satisfying so far.
The WebSocket.LowLevel module is interesting for send batches, but my main issue is how to associate a custom message translator to each subscription in a global protocol state. Le 16/05/2017 à 17:02, Aaron VonderHaar a écrit : > Hi, I haven't played much with WebSockets, but I have been building a > protocol on top of HTTP. I haven't yet run into an issue that made me > think to try an effects module. > > Instead of having custom subscriptions, my package has an `update` > function that takes any msgs resulting from its commands and returns > some appropriate stuff (in my case, that is an optional output value > that the caller can do something with, and also another Cmd to run). > > For the Cmds, I do have to use the Tasks portion of the HTTP API so that > I can compose and chain things together (though I do in the end return a > Cmd for most functions in my protocol's API). For WebSockets, I see > there's > http://package.elm-lang.org/packages/elm-lang/websocket/1.0.2/WebSocket-LowLevel > which provides Tasks instead of Cmds, so it's likely you could use that > for what you need. > > I don't know if those things will address all the needs of your > WebSockets protocol, but those approaches have worked for what I've been > building. (Sorry, it's not open-source, so can't share the code.) > > --Aaron V. > > On Tue, May 16, 2017 at 7:30 AM, Christophe de Vienne > <[email protected] <mailto:[email protected]>> wrote: > > Hi everyone, > > I am attempting to implement the pub/sub NATS (https://nats.io) protocol > on top of the WebSocket API as a TEA component. > > I have a hard time finding an API for subscriptions: for each > subscription some context must be kept, a unique subscription ID > generated and in some case a unique reply subject too, and I would like > each subscription to generate custom messages for the component which > made it. > > I suspect it would be a lot more natural with an effect module, with > which I could (hopefully) write, in any part of the application: > > subscriptions : Model -> Sub Msg > subscriptions model = > Nats.Subscribe model.endpoint "some.subject" MyMessage > > or, for req/rep (a pub + a short-living sub expecting a result): > > myrequest : Model -> Cmd Msg > myrequest model = > Nats.request model.endpoint "a.request.subject" MyReply > > > Another difficulty I have is that in some cases I need to send 2 or 3 > messages through the websocket, in the right order, but WebSocket.send > returns a Cmd. So I have to concat the 3 commands in 1 message, which > works but oblige > > Am I wrong being tempted by using an effect module for this kind of > module ? > If so how can I mimick such an API with a TEA approach ? > If not is there any documentation I can read to get familiar with them ? > > Is there any existing module that does this kind of thing for another > protocol ? > > Thanks! > > -- > Christophe de Vienne > > -- > You received this message because you are subscribed to the Google > Groups "Elm Discuss" group. > To unsubscribe from this group and stop receiving emails from it, > send an email to [email protected] > <mailto:elm-discuss%[email protected]>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. > > > -- > You received this message because you are subscribed to the Google > Groups "Elm Discuss" group. > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected] > <mailto:[email protected]>. > For more options, visit https://groups.google.com/d/optout. -- Christophe de Vienne -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
