Actually … they perhaps are different but they are doing fundamentally the same job - and ubidots should consider changing. Ubidots does much more with the data on its backend than Particle (at least right now) but the basic transport of the data is functionally equivalent.
As I understand Particle, they are sending a single UDP datagram with the data, optionally with a UDP end-to-end acknowledgement. For many of the types of IoT applications - dropping an occasional data packet can be fine. Over a typical 3G network … one way time for a single UDP datagram is about 150-250 msec (depending on the specific 3G network). Access times for 3G can be quite long compared to LTE, Ethernet or WiFi. The acknowledgement adds another 150=250 msec of delay. So sending a single acknowledged datagram will cost ~400-500 msec of delay to the client. Possibly missing other data due to the blocking nature of the method. Sending an unacknowledged datagram, and accepting occasional packet loss (my measurements suggest <~1% UDP packet loss ETE) cuts this time substantially. For high data rate measurement applications (say at 1 Hz or better), this is critical time.
From what I understand, ubidots is encapsulating the data in (optionally) UDP but also in an HTTP POST. HTTP requires a multi-packet acknowledged datagram exchange. Each packet exchange, particularly on a long delay network like 3G or low power wireless networks … leads to delay.
In the case we see here … to get the data reliably from the data collecting client to the data analysis server requires ~4-6x more non-productive time for ubidots than for Particle.
Without necessarily adding much value. Particle is simply sending the data in a simpler way with less overhead. ubidots could do it too … and it would improve the quality of service.
We will make UDP by default for the next version.
