I am working on a project which has a Desktop Application for MAC/COCOA, a native application for iPhone another native application in iPad. All the application do almost same thing. The applications are data driven applications. Every communication to server is made via a restful API developed in PHP.
When a user logs in a lot of data is fetched from server. And to remain in sync with server polling is done.
As there are lot of data to poll it makes application slower and un-reliable.

A possible solution that comes into my mind is to use Socket based server.

My question is that will it reasonably improve the performance?
And which technology (of sockets) will be good as a server side solution for data driven application? I have heard a lot about Node.js. Please give your suggestions.

1 Answer
1

You mention performance as a goal, but we really need to know more about your use case to recommend any specific technology. Are you transmitting complex data structures, and is there heavy server load? In case of complex data structures, you could try out Protocol Buffers from Google. If your data structures are less complex and you don't need i.e. binary support, you can use XML or JSON, depending on if you need validation.

Since you already know about Node.js, you must also know its strengths. They are: Asynchronous I/O mainly so that you can serve more clients. But performance is not only the number of clients you can serve per server. It is also a question of how hard each client strains the server. If you have a lot of number crunching going on, it might make sense to write the server in C++ or Java, languages that typically number crunch more efficiently than JavaScript.

If the performance issues you are having are solely based on network transfer speed, of course you won't gain anything by using Node.js, since pretty much every server will saturate the available bandwidth.

Since you mention that you want to stay in sync with the server after pooling is done, you definitely need some kind of socket library if your communication is birectional and/or you want to avoid pooling.