This library provides a Haskell implementation of Engine.IO, a library for real-time client-server communication on the web. Engine.IO works with old browsers via XHR long-polling, and seamlessy upgrades to web sockets. This implementation supports the majority of the Engine.IO protocol, including text and binary packets and the upgrading protocol.
- Increased the upper-bound of aeson to allow < 0.11.
- Increase upper-bound of
vectorto < 0.12.
- Same changes as 1.2.8, but the 1.2.8 release was formed incorrectly and didn’t compile.
- Fixed a bug in the heartbeat monitor. The heartbeat thread exists to ensure
that all connections are still active, so we can detect when a long-polling
connection is closed. However, older versions of
engine-io, the timer would be reset whenever we sent the client a message, rather than only when we received a message from the client. This meant that for high-traffic applications, old connections might never be removed, resulting in a memory leak.
- Support decoding payloads coming through XHR polling transport. Previously, this scenario would lead to HTTP 400 responses.
- Increased upper bound on
eitherto < 4.5.
- Increased upper-bounds of aeson to < 0.10 and of attoparsec to < 0.14.
- Increased the upper-bound of base to allow < 4.9. Now builds on GHC 7.10.1.
- Add a 100ms delay in the WebSocket upgrade process. This matches the behavior of the reference engine.io implementation (in NodeJS), and avoids a race condition on slower machines. Without this, it was possible for the client to experience a up-to-45s delay before upgrading.
- Revert double-encoding introduced in 1.0.1. This now requires that you
use a modern version of the
socket.ioclient library. This work was tested against
- We now use
stm-delayto implement a timeout, if we don’t receive network traffic from the client. Under normal operation, the Socket.io client should ping the server, so an idle session should remain alive.
- Fixed a potential race condition in session allocation, where we could clobber existing session ids.
srvParseParseRequestBodyhas changed its return type to
Either String a. This allows API providers to catch exceptions that may happen when attempting to perform this parse.
- 1.1.1 accidently removed
websocketsfrom the list of available upgrades. This release reverts that change.
Long-polling connections now emit a
pingmessage after 45 seconds, if no data is written to them.
There is a new
dupRawReaderfunction, which lets you create a read-only stream of raw communication with a socket.
srvSetResponseCodehave been merged into a single function:
srvTerminateWithResponse. This should allow
ServerAPIto be provided for Yesod.
Thanks to Tim Baumann (@timjb) for this change.
pingthread spawned by
websocketsis now disabled, as it has been observed that these pings are using invalid sockets. Specifically, see https://github.com/lpsmith/postgresql-simple/issues/117.
- Purposefully double-encode websocket traffic. Unfortunately this is necessary
due to https://github.com/Automattic/engine.io-client/issues/322. When a new
engine.iois released upstream, I will revert this.
- Initial release