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

Mike M lws14 at mordent.com
Fri Jun 20 16:05:02 CEST 2014


Hi,

After looking at the source for cancel, it appears that it uses data 
from the internal structure.  So, it's not really safe to call it from 
another thread.  If I want to make all this threadsafe, I need to lock 
in the service thread before calling service, and also lock in the other 
thread before I call cancel.  This will produce a deadlock because 
service is waiting forever and already locked, so cancel will never happen.

-m

On 06/20/2014 08:49 AM, Bas Appelo wrote:
> 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
>
>
>
> _______________________________________________
> 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/196a8e55/attachment-0001.html>


More information about the Libwebsockets mailing list