Emitter provides a messaging pattern where senders of messages, called publishers, send messages to Publish-Subscribe channels. Receivers, called subscribers, each receive a copy of the message in real-time. This decouples sending and receiving, giving you all the advantages of asynchronous communication.
We have designed a system that can be distributed across the globe. The system is designed to handle millions of messages per second and to scale horizontally without any problems.
We have built the system with a dead-simple and easy to use API. The API is designed to publish, subscribe and unsubscribe from channels, and all other functionality is built using that same API.
The entire system is designed to ensure speed-of-light message delivery. Whether you are building a web application, a dashboard, an online game or a connected car application, we ensure the fastest possible communication.
The system supports a distributed message filtering where a subscriber wishes to receive only a subset of messages, lowering the bandwidth requirement and overall design complexity of applications.
Published messages can be stored for a period of time on our servers and sent to subscribers on-demand. This ensures that your applications will never miss a message, even if they were not connected when the message was sent.
We support the MQTT protocol, the de-facto protocol for the network of physical objects or "things" with embedded electronics, software, sensors, and network connectivity, which enables these objects to collect and exchange data.
We support binary messages by default, allowing you to stay in control of the type of encoding to use, compress or encrypt the messages and save some precious battery life in the process.
We support binary and text websocket protocols which work on most of the modern browsers such as Chrome, Firefox or Edge. No bridges, no complex setup, Emitter supports websockets natively that just work.
We have designed the system to be easily deployable as a simple docker container, with little to none operational overhead. Joining a cluster is as simple as providing the new node with the IP address of one of the cluster members.
We have designed the system to be reliable, self-healing and operationally easy to maintain: there are no masters or slaves, the system is entirely peer-to-peer where if any node fails, everything will continue to work.
Emitter supports per-channel authorization policies along with SSL/TLS. Everything in our network is encrypted and we do not inspect your messages. We support binary messages, putting you in control of your own encryption.