[Libwebsockets] How to send data asynchronously to the client?

Bas Appelo bas at appelo.nl
Fri Jun 20 14:49:01 CEST 2014


Ah, yes, I'm on the development version, I can recommend using it, it 
has some extra (badly needed as you discovered) functions, but I did not 
discover any drawback yet, I do consider it stable, I'm using it quite a 
lot:

git clone git://git.libwebsockets.org/libwebsockets

Good luck!

On 06/20/2014 02:39 PM, Mike M wrote:
> Unfortunately, that call doesn't seem to exist in the version I'm 
> using.  What version is the latest stable version?
>
> Thanks!
> -m
>
> On 06/20/2014 08:29 AM, Bas Appelo wrote:
>> thread-1:
>>     libwebsocket_service(context, LARGE_NUMBER); //blocks
>>
>> thread-2:
>>     libwebsocket_cancel_service(context); // wakes up thread-1
>>
>> thread-1:
>>     libwebsocket_callback_on_writable(context, wsi);
>>     libwebsocket_service(context, LARGE_NUMBER); //blocks <= will 
>> call the callback!
>>
>> Now you will receive a callback, it works like a charm.
>> So to write data you'll need to be in a callback, but the way above 
>> shows you how to get there/enforce one.
>>
>>
>> On 06/20/2014 02:18 PM, Mike M wrote:
>>> >>/  Hi,
>>> />>/
>>> />>/  1)Is there a way to asynchronously send the data to the client? That is,
>>> />>/  without being in a callback, server spontaneously initiating data
>>> />>/  transfer to the client..!!
>>> />
>>> >Libwebsockets is basically single-threaded.  But, with care from another
>>> >server thread, you can call either
>>> >
>>> >libwebsocket_callback_on_writable(), or
>>> >libwebsocket_callback_on_writable_all_protocol()
>>> >
>>> >but you need to manage your own list of live wsi / connections with the
>>> >first option (by tracking their creating and destruction in the
>>> >ESTABLISHED and CLOSED callbacks).
>>> >
>>> >You will get a LWS_CALLBACK_SERVER_WRITABLE as soon as it's possible to
>>> >write on that connection then, and you should figure out what to write
>>> >and write it from there.
>>> >
>>> >-Andy
>>>
>>>
>>> Hi,
>>>
>>> I am doing exactly this, but it doesn't work.
>>>
>>> I have a thread that calls libwebsocket_service with a huge 
>>> timeout.  Writes, etc, are only ever done from within the callback.  
>>> When I need to write something from another thread, I queue up the 
>>> message that needs to be written and then immediately call 
>>> libwebsocket_callback_on_writeable_all_protocol on the proto I'm 
>>> writing for.
>>>
>>> Unfortunately, I never get LWS_CALLBACK_SERVER_WRITEABLE until the 
>>> libwebsocket_service times out and gets called again.  This is 
>>> totally broken.  I saw a trac issue (#56) about using ppoll.  
>>> Unfortunately, the version of the library we're using doesn't seem 
>>> to have that code in it. Any ideas?
>>>
>>> Thanks,
>>> -m
>>>
>>>
>>>
>>> _______________________________________________
>>> Libwebsockets mailing list
>>> Libwebsockets at ml.libwebsockets.org
>>> http://ml.libwebsockets.org/mailman/listinfo/libwebsockets
>>
>>
>>
>> _______________________________________________
>> Libwebsockets mailing list
>> Libwebsockets at ml.libwebsockets.org
>> http://ml.libwebsockets.org/mailman/listinfo/libwebsockets
>
>
>
> _______________________________________________
> Libwebsockets mailing list
> Libwebsockets at ml.libwebsockets.org
> http://ml.libwebsockets.org/mailman/listinfo/libwebsockets

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://libwebsockets.org/pipermail/libwebsockets/attachments/20140620/66b38e60/attachment-0001.html>


More information about the Libwebsockets mailing list