<tt><font size=2>&gt; 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.<br>
&gt; Why important? Well, because there needs to be a way to pass the data
between those components w/o copying it :-)</font></tt>
<br>
<br><font size=2 face="sans-serif">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.</font>
<br>
<br><font size=2 face="sans-serif">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.<br>
</font>
<br>
<br>
<br>
<br><font size=1 color=#5f5f5f face="sans-serif">From: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Helge Heß via swift-server-dev
&lt;swift-server-dev@swift.org&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">To: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Swift Server Dev &lt;swift-server-dev@swift.org&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Date: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">03/11/2016 17:27</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">Re: [swift-server-dev]
HTTP Parser</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Sent by: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">swift-server-dev-bounces@swift.org</font>
<br>
<hr noshade>
<br>
<br>
<br><tt><font size=2>Hi Logan,<br>
<br>
On 03 Nov 2016, at 17:50, Logan Wright &lt;logan@qutheory.io&gt; wrote:<br>
&gt; Yup, you can see a lot of it in the underlying engine module from
Vapor.<br>
<br>
is it this one?:<br>
<br>
 &nbsp;</font></tt><a href=https://github.com/vapor/engine/blob/master/Sources/HTTP/Parser/HTTPParser.swift><tt><font size=2>https://github.com/vapor/engine/blob/master/Sources/HTTP/Parser/HTTPParser.swift</font></tt></a><tt><font size=2><br>
<br>
that seems to be a pull based / blocking parser, right? That probably doesn’t
work for a lot of environments.<br>
<br>
<br>
Personally I’d suggest a small wrapper around this one:<br>
<br>
 &nbsp;</font></tt><a href="https://github.com/nodejs/http-parser"><tt><font size=2>https://github.com/nodejs/http-parser</font></tt></a><tt><font size=2><br>
<br>
It is small, fast, highly efficient, zero copy, push based, supports chunked&amp;upgrade
and is extremely well tested and widely deployed.<br>
<br>
<br>
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):<br>
<br>
 &nbsp;</font></tt><a href=https://github.com/NozeIO/Noze.io/tree/master/Sources/http_parser><tt><font size=2>https://github.com/NozeIO/Noze.io/tree/master/Sources/http_parser</font></tt></a><tt><font size=2><br>
<br>
My approach here was to keep it close to the original, which makes for
really ugly code :-)<br>
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
:-).<br>
<br>
<br>
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`
&amp; `WOResponse`? :-)<br>
<br>
<br>
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.<br>
Why important? Well, because there needs to be a way to pass the data between
those components w/o copying it :-)<br>
<br>
hh<br>
<br>
[attachment &quot;signature.asc&quot; deleted by Chris Bailey/UK/IBM] _______________________________________________<br>
swift-server-dev mailing list<br>
swift-server-dev@swift.org<br>
</font></tt><a href="https://lists.swift.org/mailman/listinfo/swift-server-dev"><tt><font size=2>https://lists.swift.org/mailman/listinfo/swift-server-dev</font></tt></a><tt><font size=2><br>
</font></tt>
<br>
<br>