[Libwebsockets] "Split" HTTP Responses
"Andy Green (林安廸)"
andy at warmcat.com
Tue Feb 26 11:49:18 CET 2013
On 26/02/13 18:38, the mail apparently from Andreas Wetzel included:
> I just wanted to let you know about the "hacky" solution I found for my
> problem (now using libwebsockets v1.22):
> In the LWS_CALLBACK_HTTP i send the appropriate HTTP header using
> libwebsocket_write (which results in a basic "write" syscall). I then
> acquire the file-descriptor for the connection using
> libwebsocket_get_socket_fd, before I return 0 from the callback.
> Returning zero will prevent libwebsockets from closing the socket when
> the callback is left.
> Now, whenever I have new data to send to the client, i write it to the
> acquired file descriptor - completely separate from libwebsockets.
> As soon as I've transferred all my data, I call close() on the
> file-descriptor, which lets libwebsockets do its final cleanup.
> This for shure is neither a clean nor good way, but a working solution
> for my exact use-case.
Well there is a working example that sends leaf.jpg now in the test
server now, including "call me back when I can send" for HTTP.
AFAIK that's enough plumbing to deal with any kind of http payload.
Did you identify what stops you from sending it using the technique in
the test server for leaf.jpg?
> On 02/14/2013 03:29 PM, Drew Noakes wrote:
>> I too would be interested in an example that shows how to formulate a
>> non-file response to a web request through libwebsockets. My use case is
>> similar -- I'd like a client to be able to request a static dump of some
>> data, probably as a JSON document. This would be composed dynamically in
>> the same process as my libwebsockets server.
>> On 14 February 2013 13:42, "Andy Green (林安廸)" <andy at warmcat.com
>> <mailto:andy at warmcat.com>> wrote:
>> On 14/02/13 21:34, the mail apparently from Andreas Wetzel included:
>> Currently, I'm using libwebsockets v1.1 to stream live
>> sensor-data to a
>> web-interface. the data is accumulated outside of libwebsockets
>> submitted to client on "writeable" callback. Everything works as
>> I would
>> expect it.
>> Now, I want to provide a method to save the sensor data-stream
>> to a file
>> (on the client-side). Easiest way to do so seems to be without
>> websockets, but using a plain HTTP download.
>> I tried to achieve a similar functionality using the
>> callback. But there seems no counterpart to the
>> LWS_CALLBACK_SERVER_WRITEABLE callback for HTTP (or
>> connections. Is that true?
>> Does anybody know how to handle that? Or is there another
>> method to send live-data to a file on client-side?
>> Any help would be highly appreciated.
>> You are right, it's missing right now.
>> Originally the HTTP stuff was just added to allow lws to deliver a
>> "seed" html script that would make the websocket connections from
>> the client back to the server, as you can see in the test server.
>> That works fine.
>> The http file transfer stuff has been upgraded recently to use
>> "writable" callbacks, and to stuff the send channel until just
>> before it would block, but it's special for the case you have a
>> physical file on the server you want to transfer: there's no general
>> way to take care of writeability callback in http as there is in
>> websocket protocol.
>> Actually I think that is pretty desirable to also provide it for
>> http. I'll take a look at adding it shortly / tomorrow.
>> Libwebsockets mailing list
>> Libwebsockets at ml.__libwebsockets.org
>> <mailto:Libwebsockets at ml.libwebsockets.org>
More information about the Libwebsockets