[swift-server-dev] HTTP Parser
Chris Bailey
BAILEYC at uk.ibm.com
Thu Nov 3 15:27:33 CDT 2016
> BTW: Something I consider important to discuss across all areas of
interest (crypto, sockets, HTTP) is a protocol to represent a chunks of
bytes and chunks of chunks of bytes (buckets and brigades in Apache
terms). Of course that could be just NSData or DispatchData but I expect
that some frameworks have their own way to represent such buffers, hence a
protocol would be nice.
> Why important? Well, because there needs to be a way to pass the data
between those components w/o copying it :-)
I think Data/NSData probably makes most sense here, because the data is
likely to be passed from the frameworks onto wider sets of packages, which
are likely to use NSData - so the overall consistency reduces the overhead
of copying and/or translating data types etc.
That said, there's some performance work that I know needs doing in
Data/NSData, which means frameworks that use their own data types are
(today) faster in that area.
From: Helge Heß via swift-server-dev <swift-server-dev at swift.org>
To: Swift Server Dev <swift-server-dev at swift.org>
Date: 03/11/2016 17:27
Subject: Re: [swift-server-dev] HTTP Parser
Sent by: swift-server-dev-bounces at swift.org
Hi Logan,
On 03 Nov 2016, at 17:50, Logan Wright <logan at qutheory.io> wrote:
> Yup, you can see a lot of it in the underlying engine module from Vapor.
is it this one?:
https://github.com/vapor/engine/blob/master/Sources/HTTP/Parser/HTTPParser.swift
that seems to be a pull based / blocking parser, right? That probably
doesn’t work for a lot of environments.
Personally I’d suggest a small wrapper around this one:
https://github.com/nodejs/http-parser
It is small, fast, highly efficient, zero copy, push based, supports
chunked&upgrade and is extremely well tested and widely deployed.
I also did a straight port of that to Swift, though if you can use the C
version I wouldn't use the port as it is significantly slower (and may
have extra bugs introduced during the port):
https://github.com/NozeIO/Noze.io/tree/master/Sources/http_parser
My approach here was to keep it close to the original, which makes for
really ugly code :-)
I think it may be worthwhile to do another attempt of a port of the
parser, but less 1:1 like mine, in a Swiftier way (the original uses a lot
of goto’s :-).
As mentioned, I wouldn’t expect people to use the low level API but rather
have nice objects filled by the underlying parser. What about `WORequest`
& `WOResponse`? :-)
BTW: Something I consider important to discuss across all areas of
interest (crypto, sockets, HTTP) is a protocol to represent a chunks of
bytes and chunks of chunks of bytes (buckets and brigades in Apache
terms). Of course that could be just NSData or DispatchData but I expect
that some frameworks have their own way to represent such buffers, hence a
protocol would be nice.
Why important? Well, because there needs to be a way to pass the data
between those components w/o copying it :-)
hh
[attachment "signature.asc" deleted by Chris Bailey/UK/IBM]
_______________________________________________
swift-server-dev mailing list
swift-server-dev at swift.org
https://lists.swift.org/mailman/listinfo/swift-server-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-server-dev/attachments/20161103/bf8933ee/attachment.html>
More information about the swift-server-dev
mailing list