Benchmarks
We tested Copxy against MQTT and HTTP to demonstrate the efficiency and benefit of the CoAP protocol. All benchmarks are using secured connections and model a constrained IoT device with sparse periodic short messages
​
We are not benchmarking against lwM2M, as it uses the same protocol (CoAP) you can expect similar results. Copxy resembles most the HTTP API and REST API notations and data model where as lwM2M does not, it uses the object/resource model. See more about the differences between Copxy and lwM2M in this comparison
Basic Telemetry
We created a simple setup on one of the most popular IoT platforms - AWS IoT core
Our test device is sending a simple telemetry report
(38 bytes) in four secured methods:
-
MQTT directly IoT Core using mosquitto client
-
HTTP directly to IoT Core using curl client
-
Copxy with X.509 credentials using copxy client
-
Copxy with PSK credentials using copxy client
Copxy can send the same payload using only 13% the size of the same MQTT transaction
​
That's about x7.5 better than MQTT and HTTP
Message delivery time is better with Copxy even though we are using a proxy and not a direct call
The CoAP advantage
Copxy is using CoAP and DTLS as the transport protocol. CoAP is performing best in short messages that characterise IoT devices
In this experiment we compared The total message size, duration and the efficiency of secured CoAP MQTT and HTTP with payloads from 128 bytes to 16 Kbytes
CoAP is clearly dominant for payload sizes below 4096, where as typical IoT messages are less than 1024 bytes
CoAP sizes are between x4.5 – x7 smaller for messages below 1024 bytes
CoAP duration is similar or shorter than MQTT/HTTP up to 4 Kbytes, and loses its benefit for larger messages
Multiple requests aggregation
Being a proxy, Copxy is ideal for aggregating requests from multiple application servers
In this benchmark our IoT device wakes periodically to send a telemetry report. At the same time it gets local weather from a weather service and also a time update
​
Since each server is different, using HTTP requests every query involves a separate TLS connection. Using Copxy we only need to establish one connection for all the calls
​
Copxy can aggregate these calls under the same DTLS connection to achieve much better performance
By grouping the requests Copxy is x10.5 more efficient than calling the servers directly
By grouping the requests the total duration is shortened by 35%
Copxy Vars
Copxy is boosted with some tricks specifically designed for IoT scenarios. For example the ability to store and reuse variables (we call it Copxy vars)
​
In this benchmark we substitute a JWT with a Copxy variable
Many applications require the use of a JWT (Json Web Token) to authenticate their clients. A JWT is typically inserted in the header section of HTTP requests. The JWT can be quite large, typically ~ 1 kByte, much bigger than the payload itself
By using Copxy Variables clients can store their JWT securely on Copxy and reuse it many times saving almost all of its size in their message payloads. The following benchmark tested a short message, authenticated with JWT using HTTP, Copxy and Copxy+Vars
Just by using Copxy our message was reduced x4.5 and using Copxy Variables by x7.7
Just by using Copxy our messages are x4.5 smaller, by adding Copxy vars x7.7
Message duration is much shorter