0

I'm working on an IoT App which will do majority of the basic IoT operations like reading and writing to "Things".

Naturally, it only makes sense to have an event-driven server than a polling server for real-time updates. I have looked into many options that are available and read many articles/discussions too but couldn't reach to a conclusion about the technology stack to use for the backend.

Here are the options that i came across:

  • Meteor
  • Python + Tornado
  • Node.js + Socket.io
  • Firebase
  • PubNub
  • Python + Channel API (Google App Engine)

I want to have as much control on the server as possible, and of course at the best price. What options do i have? Am i missing something out?

Personally, i prefer having a backend in Python from my prior experience.

Ehmad Zubair
  • 215
  • 3
  • 10

2 Answers2

1

You're comparing apples to oranges here in your options. The first three are entirely under your control, because, well, you own the server. There are many ways to get this wrong and many ways to get this right, depending on your experience and what you're trying to build.

The last three would fall under Backend-As-A-Service (BaaS). These let you quickly build out the backend of an application without worrying about all the plumbing. Your backend is operated, maintained by a third party so you lose control when compared to your own server.

... and of course at the best price

AWS, Azure, GAE, Firebase, PubNub all have free quotas. If your application becomes popular and you need to scale, at some point, the BaaS options might end up being more expensive.

asadmshah
  • 1,338
  • 9
  • 7
0

Back& is another BaaS you can consider which gives you more control on socket.io but without the need to setup anything (disclaimer: I work for backand.com).

In the server side actions you make a decision when to fire the event and to which users or roles and in the client just add listener and it works.

Checkout this codepen demonstrating the solution: http://codepen.io/backand/pen/VvoKya

Client side:

Backand.on('todo_updated', function (data) {
  //Get the event and refresh the list
  console.log("event:" + data);
  $scope.readList();
});

Server side:

Socket.emitAll('todo_updated', dbRow);
Itay
  • 734
  • 4
  • 5