[swift-server-dev] Prototype of the discussed HTTP API Spec

Carl Brown carl.brown.swift at linuxswift.com
Tue May 30 13:24:02 CDT 2017

> On May 30, 2017, at 12:02 PM, Johannes Weiss via swift-server-dev <swift-server-dev at swift.org> wrote:
> if you use kqueue/(e)poll/select you get inversion of control, ie. you block only one (or a few) threads in kqueue/epoll/select and then invoke code to handle the event (which can be 'file descriptor XYZ can be read/written').
> So the echo server becomes more like this (this is extreme pseudo code and ignores most of the real challenges)
> func echoServer(socket: Socket) {
>    socket.whenReadable { bytes in
>        socket.whenWritable {
>            socket.write(bytes)
>        }
>    }
> }
> If you want a more realistic example check out DispatchSources and DispatchIO from Dispatch. 

For whatever it's worth, the implementation we posted uses DispatchSources for reading from the Socket (see https://github.com/carlbrown/HTTPSketch/blob/master/Sources/HTTPSketch/BlueSocketDriver/BlueSocketConnectionListener.swift#L166-L169 <https://github.com/carlbrown/HTTPSketch/blob/master/Sources/HTTPSketch/BlueSocketDriver/BlueSocketConnectionListener.swift#L166-L169>), although in my testing using an additional DispatchSource for writing didn't seem to affect the performance at all (but did increase complexity) so I pulled it out.

I'd love to get more eyes on that code, if anyone has the time.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-server-dev/attachments/20170530/0bd30d3d/attachment.html>

More information about the swift-server-dev mailing list