Why do you say that HTTP long-poll is bad for battery, but persistent TCP connections are not?<div>A proper long-poll with a long timeout should be no different from a persistent TCP connection with the same time-out.</div>
<div><br></div><div>Sincerely,</div><div><br></div><div>jw</div><div><br clear="all"><br>--<br>Americans might object: there is no way we would sacrifice our living standards for the benefit of people in the rest of the world. Nevertheless, whether we get there willingly or not, we shall soon have lower consumption rates, because our present rates are unsustainable. <br>
<br>
<br><br><div class="gmail_quote">On Tue, Jul 12, 2011 at 1:25 PM, Matthew Hillsborough <span dir="ltr"><<a href="mailto:matthew.hillsborough@gmail.com">matthew.hillsborough@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Greetings Erlang community,<div><br></div><div>Let me further elaborate on my question that's in the subject of this message. I tried to reach out with this question on StackOverflow, however I did not have much luck there. Perhaps the community here can provide some feedback here for me to let me know if I'm on the right track or if Erlang is not the right tool for what I'm trying to accomplish.</div>


<div><br></div><div>







<p>I'm building native mobile applications in both iOS and Android. These apps require "realtime" updates from and to the server, same as many (but not all) network-based application does (Facebook, social games like Words with Friends, Finance applications, etc). The communication here is bi-directional, in the sense that the server might have updates for the mobile clients and the clients will be pushing data down to the server whenever necessary.</p>



<p>I think using HTTP long polling for this is over kill in the sense that long polling can be detrimental to battery life, especially with a lot of TCP setup/teardown for every HTTP connection the device needs to send out through the wire. It might make sense to have the mobile applications use persistent TCP sockets to establish a connection to the server, and send RPC style commands to the server for all web service communication. This ofcourse, would require a server to handle the long-lived TCP connection and be able to speak to a web service once it makes sense of the data passed down the TCP pipe. I'm thinking of passing data in plain text using JSON or XML and then using some kind of Erlang interface to HTTP to call a web service to handle all the REST type communication. The responses would then go back to the "RPC" Erlang instance, which would send the updates to the appropriate client(s).</p>



<p>Perhaps an Erlang based RPC server would do well for a network based application like this. It would allow for the mobile apps to send and receive data from the server all over one connection without multiple setup/tear down that individual HTTP requests would do. Since no web browser is involved, we do not need to deal with the nuances of HTTP long-polling at the mobile client level. I also haven't seen great long polling/keep-alive support on the client-side in iOS, but that's irrelevant for the community here.</p>


<p>A lot of these "COMET" and long-polling/streaming servers are built with HTTP in mind. I'm thinking just using a plain-text protocol over TCP is better catered for the type of app I'm building, will make the client more responsive, allow for receiving of updates from the server without constantly polling the server, etc.</p>



<p>I also looked into HTTP pipelining, but it doesn't look to be worth the trouble when it comes to implementing it on the clients. Also, I'm not sure if it would allow for bi-directional communication in the client<->server communication channel. </p>


<p>Am I completely out of line in thinking that building a custom solution in Erlang is a good idea here? To my understanding, Erlang excels at servers like this, and if I run the server on tcp/80, I should be able to avoid most firewall/port issues. The client would need work to deal with timeouts, re connections, acknowledging receipt of asynchronous requests, but that's not Erlang's problem. </p>


<p>Has anyone built something similar before? Should I just stick to a web server and deal with "COMET" type technologies? (WebSockets, long-polling, client-side polling).</p><p>Was hoping someone could solidify that I'm not entirely insane for wanting a better solution than HTTP would serve in this case, at least at the client level. I'll still be using HTTP/REST extensively, the Erlang server would just handle the persistent connections and messaging to the Web Service (which would probably be something like Django or Rails).</p>


<p>Sorry for the long post; I am just excited to get into the heads of people who are smarter than I.</p><p>Happy hacking!</p><p>Matthew</p><p><br></p></div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>