[web-devel] A WebSocket library

Jasper Van der Jeugt m at jaspervdj.be
Sun Sep 25 16:46:32 CEST 2011

Hello all,

I have been working on a WebSocket [1] library lately, which you can find here
[2]. It's getting to the point at which I want to release it on Hackage.
However, there is one thing remaining before the library will be really useful
for applications: integration.

I would like to provide integration with Happstack, Snap and Yesod -- this is
why I have built the library around the enumerator package [3]. It would be
awesome if frameworks could more or less agree on a way in which an HTTP
connection can be "transformed" to a WebSocket.

That way, I will be able to provide packages such as `websockets-warp`,
`websockets-snap` etc.

Currently, the "entry point" of the websockets library is the following

    runWebSockets :: WebSockets a
                  -> Enumerator ByteString IO a
                  -> Iteratee ByteString IO ()
                  -> Iteratee ByteString IO a

Where the first argument is the user-supplied code in the `WebSockets` monad
(needs to keep a bit of state etc.), the second argument is an enumerator which
the library can use to read from the socket, and the last argument is an
iteratee with which the library can write to the socket.

A web server then needs to provide some way to get this enumerator/iteratee
pair, and hand it over to the library (currently, this is lacking). Some more
details apply, e.g. the web server shouldn't kill the websocket handler as fast
as regular HTTP connections.

Is this proposal somewhat agreeable? I'm open to any feedback.

[1]: http://en.wikipedia.org/wiki/WebSocket
[2]: http://github.com/jaspervdj/websockets
[3]: http://hackage.haskell.org/package/enumerator


More information about the web-devel mailing list