From: Serge P. <ser...@gm...> - 2012-04-11 09:39:26
|
Hi! I try to implement an RPC server with ability to stream endless responce. So, only the way for client to stop receive this kind of responses is to close the socket when it decide to do this. To produce the stream I spawn a producer process and use the {streamcontent, _, _} response. How the stream producer can be notified to stop sending data (and to release involved resources)? And another question - how can the stream producer to immediately close the socket (i.e. on exception)? Thanks, Serge |
From: Serge P. <ser...@gm...> - 2012-04-11 13:05:41
|
11 апреля 2012 г. 12:32 пользователь Serge Polkovnikov < ser...@gm...> написал: > Hi! > I try to implement an RPC server with ability to stream endless responce. > So, only the way for client to stop receive this kind of responses is to > close the socket when it decide to do this. To produce the stream I spawn a > producer process and use the {streamcontent, _, _} response. How the stream > producer can be notified to stop sending data (and to release involved > resources)? > > And another question - how can the stream producer to immediately close > the socket (i.e. on exception)? > > This question I have solved by using the {streamcontent_from_pid,_,_} flow. But I don't know is the yaws_api:stream_process_deliver_chunk/2 blocking or not? I need blocking behaviour. > Thanks, > > Serge > |
From: Steve V. <vi...@ie...> - 2012-04-11 13:25:51
|
On Wed, Apr 11, 2012 at 9:05 AM, Serge Polkovnikov <ser...@gm...> wrote: > > > 11 апреля 2012 г. 12:32 пользователь Serge Polkovnikov > <ser...@gm...> написал: > >> Hi! >> I try to implement an RPC server with ability to stream endless responce. >> So, only the way for client to stop receive this kind of responses is to >> close the socket when it decide to do this. To produce the stream I spawn a >> producer process and use the {streamcontent, _, _} response. How the stream >> producer can be notified to stop sending data (and to release involved >> resources)? >> >> And another question - how can the stream producer to immediately close >> the socket (i.e. on exception)? >> > This question I have solved by using the {streamcontent_from_pid,_,_} flow. > But I don't know is the yaws_api:stream_process_deliver_chunk/2 blocking or > not? I need blocking behaviour. The yaws_api:stream_process_deliver_chunk/2 function formats the data you want to send as an HTTP 1.1 chunked transfer, then calls gen_tcp:send to send the chunk. It returns to your code immediately after gen_tcp:send returns. Note that the yaws_api delivery functions are there for convenience, but you're not forced to use them. Your streaming app is pretty much free to do what it wants with the client socket, which is available as a field in the #arg record. It can send directly on the socket if it wants to. Just be sure to call yaws_api:stream_process_end/2 when finished with the socket. If your app closes the socket before making that call, be sure to pass the atom 'closed' as the first argument to stream_process_end/2. --steve |