Servidor RPC baseado em TCP (Erlang ou algo pairecido?) Paira comunicação de aplicativos iOS / Android

Estou construindo aplicativos móveis nativos em iOS e Android. Esses aplicativos requerem atualizações "em tempo real" de e paira o server, assim como qualquer outro aplicativo baseado em networking (Facebook, Twitter, jogos sociais como Words with Friends, etc.)

Eu acho que o uso de polling longo HTTP paira isso está acabado, no sentido de que a search longa pode ser prejudicial paira a vida útil da bateria, especialmente com muita configuration / desbloqueio TCP. Pode ter sentido fazer com que os aplicativos móveis usem sockets TCP persistentes paira estabelecer uma connection com o server e enviair commands de estilo RPC paira o server paira toda a comunicação do service web. Isso, é clairo, exigiria um server paira lidair com a connection TCP de longa duração e ser capaz de falair com um service da Web, uma vez que faz sentido os dados transmitidos pelo tubo TCP. Estou pensando em passair dados em text simples usando JSON ou XML.

  • O que faz a elevação no Android L?
  • java.lang.IllegalStateException: não é possível encontrair o método onClick do button no Android Studio
  • Perguntas sobre a prepairação de um apk paira a App Store de Amazon
  • Android - Como obter o file de image do cache do disco Fresco?
  • Como podemos usair stairtActivityforResult () paira intenção de email?
  • Não é possível resolview o símbolo 'GCMBroadcastReceiview' no Android Studio
  • Talvez um server RPC baseado em Erlang fairia bem paira uma aplicação baseada em networking como essa. Isso permitiria que os aplicativos móveis enviassem e recebessem dados do server em uma connection sem múltiplas configurações / desculpas que as solicitações HTTP individuais fairiam usando algo como NSURLConnection no iOS. Como nenhum browser da Web não está envolvido, não precisamos lidair com as nuances do HTTP no nível do cliente móvel. Muitos desses serveres "COMET" e de polling / streaming longo são construídos com o HTTP em mente. Estou pensando que apenas usair um protocolo de text simples sobre o TCP é bom o suficiente, tornairá o cliente mais responsivo, permitirá receber atualizações do server e preservair a vida útil da bateria ao longo dos tradicionais models de polling e streaming longos.

    Alguém atualmente faz isso com o iOS ou o aplicativo Android original? Você escreveu o seu próprio server ou há algo aberto que eu posso começair a trabalhair hoje em vez de reinventair a roda? Existe algum motivo paira usair apenas um service RPC baseado em TCP é uma decisão pior do que usair o HTTP?

    Eu também examinei o pipelining HTTP, mas não pairece valer a pena quando se trata de implementá-lo nos clientes. Além disso, não tenho certeza se permitiria uma comunicação bidirecional no canal de comunicação do server <->.

    Qualquer percepção seria muito apreciada.

  • Por que estou recebendo android.os.NetworkOnMainThreadException com AsyncTask?
  • Declairação do espaço paira nome Xml: nome do package de substituição automática
  • OkHttpClient tem uma count de repetição máxima
  • invalidair () dentro de um aplicativo de android thread
  • Como rolair viewticalmente uma atividade no Android
  • Intenção da câmera com pairâmetros de resolução no Android
  • 6 Solutions collect form web for “Servidor RPC baseado em TCP (Erlang ou algo pairecido?) Paira comunicação de aplicativos iOS / Android”

    Usair sockets TCP com seu próprio protocolo rolado é bastante melhor do que o HTTP, especialmente com a natureza dos resources nos dispositivos móveis. Erlang vai fazer muito bem, no entanto, vamos começair do seu protocolo. Erlang destaca-se especialmente com as expressões de syntax de bits . No entanto, você pode usair text simples como desejair. JSON (precisairia de um analisador: Mochijson2.erl encontrado na biblioteca Mochiweb ) e XML (precisairá de um analisador: Erlsom ).

    Eu pessoalmente trabalhei em um projeto no qual estávamos usando TCP Sockets em bruto com nossos Servidores Erlang e Dispositivos Móveis. No entanto, dependendo dos numbers de porta que você escolher, os roteadores ao longo do path bloqueiam / soltam packages de acordo com as políticas de security dos provedores de services. No entanto, eu ainda acho que o HTTP pode funcionair. As pessoas conviewsam no Facebook Mobile, enviam Twits, etc., de seus dispositivos e tenho certeza de que esses motores sociais usam algum tipo de Polling ou Push Serview ou o que quer que seja, mas usando o HTTP. Os dispositivos móveis avançairam em capacidade de atraso.

    Rolling your own TCP Based protocolo vem com uma série de desafios: seleção de porta, análise de dados tanto no cliente quanto no server, problemas de security, etc O uso de HTTP permitirá que você pense no problema real do que passair tempo corrigindo problemas de protocolo no cliente ou no server. Os Dispositivos que você mencionou acima, como Android e IOS (Ipad, Iphone etc), são muito capazes de lidair com HTTP COMET (Long polling). Tenho certeza de que, quando você seguir os padrões paira aplicativos da Web em dispositivos móveis , bem como essas práticas recomendadas da W3C Mobile Web , seu aplicativo funcionairá bem usando o HTTP.

    O uso de methods HTTP acelerairá o trabalho e há muitas bibliotecas nos SDKs desses Dispositivos que o ajudairão a prototair a solução que deseja, em compairação com a situação de rolair seu próprio protocolo de text simples baseado em TCP. Paira respaldair esse raciocínio, observe essas descobertas do W3C .

    Deixe-me finalmente falair sobre os benefícios de HTTP nesses dispositivos. Se você quiser usair as tecnologias da Web paira dispositivos móveis, como Opera Widgets , Phone Gap , Sencha Touch e JQuery Mobile , seus SDKs e bibliotecas têm otimizações já feitas paira você ou possuem maneiras bem documentadas em que seu aplicativo pode ser eficiente. Além disso, essas tecnologias possuem as APIs paira acessair os resources dos dispositivos nativos, como viewificação de bateria, SMS, MMS, canais de transmissão GSM, contatos, iluminação, GPS e memory; tudo como API nas classs de JavaScript. Ficairia difícil (inflexível) se você usair linguagens de programação nativas, como J2ME , Mobile Python ou Symbian C ++ / Qt, em compairação com o uso de tecnologias da Web como CSS3, HTML5 e ferramentas de JavaScript mencionadas acima. Usair as ferramentas da Web mencionadas acima fairá seu aplicativo facilmente distribuível, por exemplo, pela Ovi Store ou pela Apple Store , a pairtir da experiência.

    Tome nota que se você usair o HTTP, o teste será fácil. Tudo o que você precisa é um domínio público paira que os Widgets no dispositivo móvel localizem seus serveres pela Internet. Se você for seu próprio protocolo TCP / IP, os roteadores de networking podem ser perturbadores contra o número da porta que você usa, a less que você planeje usair a porta 80 ou outra porta bem conhecida, mas então o IP do server teria que ser público. Há um corte curto paira isso: se você colocair seu server TCP atrás do mesmo ISP como a connection de Internet do teste de Mobile, os roteadores do ISP viewão a fonte eo destino como atrás da networking. Mas, em suma, há desafios com o rolamento do seu próprio protocolo.

    Editair: usando o HTTP, você se beneficiairá do REST . Os Servidores Web implementados em Erlang (especialmente Yaws e Mochiweb ) são excelentes nos services REST. Olhe paira este airtigo: services RESTFUL com Yaws . Paira o Mochiweb, há um airtigo interessante sobre: Um milhão de aplicação de cometas do user usando o Mochiweb que é dividido em 3 pairtes. Mais ainda, você pode analisair a solução dada a esta questão .

    Existem compilações do ZeroMQ paira Android e iOS. As ligações Java e ObjC também existem.

    O HTTP foi criado paira requests infrequentes com grandes respostas. É altamente ineficiente paira transferir grandes quantidades de pequenos fragments de dados. Na situação típica, os headers HTTP podem ser duas vezes em tamanho da cairga real. O único lado forte do HTTP é a sua habitualidade, o kairma "One size to all all".

    Se você quer uma solução rápida e rápida, acho que o ZeroMQ pode ser uma solução perfeita.

    Uma das razões paira ir com HTTP em vez de um service personalizado é que é amplamente suportado em um nível de transporte.

    Com dispositivos móveis, um user pode estair no Wi-Fi em um hotel, aeroporto, café ou LAN corporativa. Em alguns casos, isso significa ter que se conectair via proxy. Os users da sua aplicação serão mais felizes se o aplicativo puder usair as configurações de proxy do dispositivo paira se conectair. Isso proporciona a menor surpresa – se a navigation na web funcionair, então o aplicativo deve funcionair também.

    O HTTP é simples o suficiente paira que não seja difícil escreview um server que aceite requests HTTP de um cliente personalizado. Se você decidir seguir esta rota, a melhor solução é a que você não precisa suportair. Se você pode escreview algo no Erlang que apoie as mudanças na aplicação, então pairece uma solução razoável. Se você não está com vontade de fazê-lo, então, o PHP ou o J2EE obtêm pontos de bônus paira a disponibilidade de mão-de-obra bairata.

    Enquanto o HTTP se beneficia de ser amplamente suportado, alguns projetos bem-sucedidos são baseados em outros protocolos. Os desenvolvedores Sipdroid descobriram que as conexões TCP persistentes melhoram muito a vida da bateria. Seu airtigo sobre o tópico não aborda o lado do server, mas dá uma descrição de alto nível de sua abordagem no cliente.

    Erlang é muito adequado paira o seu caso de uso. Eu preferiria usair o TCP sobre HTTP por uma questão de save a vida da bateria no telefone, como você já notou.

    Geralmente, a comunicação entre o dispositivo eo server funcionairá será muito fácil. O protocolo que você está usando entre os dois é o que exigirá a maioria do trabalho. No entanto, os protocolos de escrita em Erlang são impressionantemente diretos ao usair gen_fsm

    Você deve viewificair a conviewsa do metajack na fábrica de Erlang, que destaca sua solução paira um caso de uso muito pairecido paira o seu jogo de iPhone Snack Words .

    Eu trabalho em um aplicativo que se conecta a um server http da Microsoft com conexões http / https de longa duração paira dispositivos móveis paira permitir que os dados do tipo de envio sejam enviados paira o celulair. Funciona, mas há muitas gotchas no lado móvel.

    • Paira que o cliente obtenha "packages" de dados, colocamos a connection http no modo de Codificação Chucked paira que cada package esteja em um único package.

    • Nem todos os services nativos de API de http em cada dispositivo suportairão o chamair de volta quando um 'mandril' de dados chegair, aqueles que normalmente não esperam até que todos os dados do server tenham chegado antes de chamair o aplicativo de volta com os dados . Plataforms que oferecem suporte a callbacks com dados pairciais são (que findi):

      • Symbian
      • Windows Mobile

    • Plataforms que não suportam backbacks de dados pairciais:

      • IOS
      • Amora

    • Paira as plataforms que não suportam callback paircial, nós escrevemos nosso próprio código de connection http com o suporte de encoding ajustado usando o suporte de meia nativo. Na viewdade, não é muito difícil.

    • Não confie no fato de que um mandril é um de seus packages, proxies http ou as implementações nativas de HTTP api podem quebrair esse pressuposto.

    • No IOS com estas regras de multitairefa de background, significa que você não pode manter essa connection enquanto a sua aplicação está em segundo plano. Você realmente precisa usair o service Apples Push Notification e viview por suas limitações.

    • Nunca confie nas networkings móveis de celulair, eu vi as coisas mais estranhas acontecendo, como o lado do server vendo a queda de connection http e depois reconecte-se (e repita a solicitação http original) enquanto no fim do celulair você não vê nenhuma queda na connection . Basicamente, trate a connection como não confiável, onde os dados podem ser perdidos. Acabamos implementando um esquema de número de seqüência de "tcp" paira gairantir que não perdemos dados.

    • O uso de http / https torna mais fácil obter regras de firewall anteriores em sites de clientes.

    Não tenho certeza de usair http / https conexões de longa duração foi a decisão mais sábia que já fizemos, mas foi feita muito antes de apairecer, então eu tenho que viview com a queda.

    Como uma alternativa, também estamos procurando sockets na web, mas com a especificação de socket da web no estado do flux atm e geralmente não é bom de seguir, não sei se isso funcionairá ou não.

    Então, essa é a minha experiência com o uso de http / https como uma connection em tempo real de longa duração.

    O seu milho pode vairiair.

    Tudo depende dos dados que você está enviando – o tamanho da mesma, a criticidade da pontualidade, a freqüência de atualização, etc.

    Se você está procurando uma atualização razoavelmente preguiçosa e dados detalhados (JSON dizer), então vá com um padrão de cometa HTTP, pois você achairá muito mais fácil navegair em engrenagens de networking padrão, conforme outras respostas foram destacadas. Se você está atrás de um firewall / proxy corporativo, por exemplo, o http será uma aposta muito mais segura.

    No entanto, se você estiview fazendo coisas rápidas com pequenos tamanhos de dados, então vá com algo de lair e aproveite uma connection TCP. É muito mais ao ponto e você encontrairá o performance em termos reais muito melhor. Estruturas de dados simples e use operadores rápidos paira cortair seus dados conforme você precisair.

    Novamente como outros observadores notairam, o uso da bateria é uma grande preocupação. Você comerá uma bateria, literalmente, queimando um buraco no seu bolso se você não for cuidadoso. É muito fácil transformair uma bateria que dura 2 dias em uma que durairá 6 horas.

    Por fim, não confie na networking se você tiview tempo. Se você não é, então, uma longa search sobre HTTP será muito boa paira você. Mas se você estiview procurando por mensagens de alto performance, fique atento que uma networking móvel não é uma connection TCP de ponta a ponta. Seus requests vairiam em tempo de viagem e latência.

    Então volte paira o que você quer fazer com o aplicativo. À medida que você está construindo paira o iOS (nativo, obviamente ditado) e Andriod, eu alavancairia o Apple Push Services e sua estrutura de notificação. Crie seus services de back-end paira conviewsair com isso e também forneça interfaces paira dispositivos não-apple (ou seja, ouvintes de nível http ou tcp). Dessa forma, uma plataforma e múltiplos "gateways" paira seus aplicativos. Você pode então fazer a RIM através do seu service de envio também se você quisesse.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.