Web Dev + Android App

vrael

Power Member
Boas,

Como sugerem que faça a conexão Android > Browser no PC. Tenho bases java, html, css, js, jquery, php e mysql. Estou disposto a aprender uma coisita ou outra e martelar no stackoverflow.

O objetivo é pôr o browser a responder a pedidos feitos via tlm, para um projeto da universidade.


Obrigado
 
Quero ter uma espécie de bd com imagens e conforme os touchs do android, a imagem ser diferente. Basicamente preciso de implementar uma espécie de protocolo com entre o servidor (browser) e o client (android). Mas não faço ideia por onde começar, sempre que usei Client-server foi em Java (sob a forma de sistema distribuido).
 
O browser não é um servidor, é um cliente. Um servidor é um computador com ligação permanente à internet (ou pelo menos ligado em rede - partindo do principio que não o queres usar só no teu pc), e com um conjunto de software instalado, entre os quais o sistema operativo, um servidor web, e uma base de dados.

Por norma tem um ip publico, e recebe pedidos dos clientes (browsers, ...) e manda respostas de volta.

Se queres começar por algum lado, começa por instalar uma stack no teu pc, ou alugar uma VPS.

Se utilizas windows, o mais simples e bem documentado será praí o wampserver
http://www.wampserver.com/en/

WAMP
Windows, Apache, MySQL, PHP

Eu normalmente uso uma stack LNMP, se estiveres à vontade em ambientes Linux iria por aí, é o que é mais costumeiro usar-se em ambientes de produção (Alternativamente ao Nginx, também podes usar Apache)

LNMP
Linux, Nginx, MySQL, PHP

LAMP
Linux, Apache, MySQL, PHP

Podes inclusive instalar uma stack num telemovel android, tornando-o num servidor web.

Também tens servidores java, abaixo segue uma lista deles.
http://java-source.net/open-source/web-servers



Já deve bastar pra te entreteres nos próximos dias.
 
Última edição:
Eu costumo usar o XAMPP para usar o meu computador como localhost para os testes.

Ou seja implemento o servidor em Apache? E em termos de protocolo Android > neste caso Apache existem frameworks? Ou tem que ser à duro?
 
Eu costumo usar o XAMPP para usar o meu computador como localhost para os testes.

Ou seja implemento o servidor em Apache? E em termos de protocolo Android > neste caso Apache existem frameworks? Ou tem que ser à duro?

Quanto a Java, podes alterar a base de dados normalmente. O problema aqui é teres as mudanças em tempo real entre o browser e o servidor. Aqui estão algumas técnicas para fazeres o que pretendes:
  • Polling - Fazes um pedido com AJAX a cada X milisegundos, e atualizas o website assim que houver mudanças.
    • Desvantagens
      • Centenas/milhares de pedidos por cliente (á partida, o servidor não iria aguentar, tal como em um ataque DoS)
      • Maior parte dos pedidos não vão trazer nenhuma alteração (depende de caso para caso)
  • Long polling - Fazes um pedido, com Ajax, e o servidor só envia resposta quando houver alteração na base de dados
    • Desvantagens
      • O servidor vai ter que estar a processar o mesmo pedido durante "muito" tempo
  • WebSockets - Um "novo" protocolo que liga o cliente e o servidor, em que o cliente não precisa de fazer um pedido para receber novos dados
    • Desvantagens
      • Ainda é um sistema, relativamente, novo por isso ainda pode haver problemas de compatibilidade em diferentes browsers
  • Plug-ins - Usar outro tipo de tecnologias (como flash) para fazer o mesmo tipo de ligação utilizada nas WebSockets
    • Desvantagens
      • Obriga o utilizador a ter que instalar o plug-in
(Não coloquei aqui as vantagens porque me parecem obvias)

Tenta perceber se vai haver um grande número de utilizadores no website e/ou se vão existe muitas alterações e qual a sua periodicidade, porque é isso que vai decidir qual a melhor solução. Pessoalmente, aconcelhava-te a usar o long polling (tens como exemplo o chat do facebook).
 
Excelente explicação krazune. No android poderia fazer uma aplicação a enviar pedidos, ou teria de controlar tudo por BD?

Gostei dos websockets e parece-me uma solução interessante visto já estar habituado a lidar com sockets.
 
Se pretendes brincar com realtime, perde um bocado de tempo a investigar node.js, express e socket.io.

No entanto, (e não me leves a mal) parece haver algumas confusões de conceitos na tua cabeça, tais como o browser ser um servidor e controlar tudo pla bd (nem sei o que queres dizer com isto)

Do lado do android, podes usar uma webview ou customizar à tua vontade (ainda não percebi muito bem o que queres fazer).
 
Última edição:
Excelente explicação krazune. No android poderia fazer uma aplicação a enviar pedidos, ou teria de controlar tudo por BD?

Com a informação que nos deste, penso que a maneira como o sistema deve funcionar é, no dispositivo móvel vais estar a alterar a base de dados, como se fosse outro sitema qualquer, e quem aceder ao website vai estar a receber as alterações que foram feitas na base de dados, com WebSockets. Com isto quero dizer que, é a base de dados que vai "ligar" aquilo que é feito nos dispositivos móveis (alterações) e o website (onde vão ver as alterações).
 
Conceptualmente falamos temos.


BD ----- Servidor ------ Browser
Servidor----------- Android (app e não browser)

Quero que a app consiga fazer duas coisas comunicar em realtime (e vou investigar a sugestão do @HLopes ) e que tenha também a capacidade de enviar coisas para uma fila tipo FIFO na base de dados que será depois aberta no browser. O objetivo é varios users que andam em android consigam mandar coisas controladas por um administrador no browser, quer em realtime quer na fila.

Espero ter clarificado um bocado a coisa
EDIT: o servidor é o mesmo, não consegui é ligar xD
 
Quero que a app consiga fazer duas coisas comunicar em realtime (e vou investigar a sugestão do @HLopes ) e que tenha também a capacidade de enviar coisas para uma fila tipo FIFO na base de dados que será depois aberta no browser. O objetivo é varios users que andam em android consigam mandar coisas controladas por um administrador no browser, quer em realtime quer na fila.

Para um sistema desses, o dispositivo móvel (app que vais fazer) só precisa de se ligar á base de dados e não ao utilizador que está a ver o website.
 
Para um sistema desses, o dispositivo móvel (app que vais fazer) só precisa de se ligar á base de dados e não ao utilizador que está a ver o website.

Acho que isto é o que ele quer, só n sei se quer ambos os browsers A e B, se lhe basta o A, se lhe basta o B...

esquema.png


Faz aí um desenho...
https://www.draw.io/
 
É exatamente o que o @HLopes desenhou. Basicamente tens duas iterações diferentes a lista FIFO que não é em tempo real de envio de coisas para uma base de dados que pode ser consultada pelo browser.

A segunda iteração era a do realtime e a minha dúvida é maioritariamente nesta e que tecnologias implementar/pesquisar.

Tenho total liberdade de tecnologias. Tendo em conta que tenho bases de Java, PHP, HTML, CSSL e desenrasco JS e JQuery; já fiz sistemas distribuidos em java mas nunca em web/android.
 
Tanto os android podem dar feedback por vários pedidos HTTP que iram estar a usar uma API simples ou então se for ligação permanente, por sockets.

https://github.com/reactphp/socket (Componente para https://github.com/reactphp/react)

Edit: Uma maneira fácil de passar os dados entre socket <-> android pode ser tudo em json. Facilita. Tal e qual como as respostas das API.

Este é fácil de impementar... Juntas-lhe um package de base de dados

https://github.com/illuminate/database

E pronto está quase tudo hehe
 
Última edição:
Não conhecia esse ReactPHP, é definitivamente interessante.

Parece-me uma boa abordagem ao problema, e não precisas de instalar + nada na stack.

Vou dar uma voltinha nisso assim que puder :)
 
Então vamos lá preparar a abordagem

BD > MySQL
Servidor > Instalo um apache simples? Visto estar habituado a lidar com o XAMPP no windows para simular um servidor a transição não deve ser muito difícil penso eu.
Preciso ainda de usar o ReactPHP para o realtime.

Mas falta a queue na BD, ou simplesmente é fazer o upload para a BD e depois trato na web?
 
Para testes podes usar o XAMPP. Eu cá tenho sempre virtualbox + vagrant. Faço uma "config" no https://www.puphpet.com/ e tenho sempre ambiente em linux.
Só não sei se php em XAMPP se queixa com sockets.

Se fores pela abordagem dos sockets, também podes implementar tu, mas o react já tem tudo feitinho :D
Se vires no react/socket, tem um exemplo como usar. Tens o método "on" como callback, aí vais fazer o que te apetecer quando recebes dados.

E ao package da BD é um excelente package, bastante melhor do que usares mysqli/pdo "simples".
 
Então vamos lá preparar a abordagem

BD > MySQL
Servidor > Instalo um apache simples? Visto estar habituado a lidar com o XAMPP no windows para simular um servidor a transição não deve ser muito difícil penso eu.
Preciso ainda de usar o ReactPHP para o realtime.

Mas falta a queue na BD, ou simplesmente é fazer o upload para a BD e depois trato na web?

A "queue" na BD não percebo. É preciso moderar alguma coisa? É que se é preciso o input do "moderador" para que as cenas sejam passadas de um cliente para o outro o realtime vai-se à vida, não? Quando o moderador for mandar um fax, pára tudo.

No desenho que fiz imaginei que a bd era apenas um registo de "quem", "quando", e "o quê" (basicamente um log de actividade). Se for o caso até podes nem precisar de uma bd, basta um ficheiro (embora a bd seja mais flexivel).

Para testes podes usar o XAMPP. Eu cá tenho sempre virtualbox + vagrant. Faço uma "config" no https://www.puphpet.com/ e tenho sempre ambiente em linux.
Só não sei se php em XAMPP se queixa com sockets.

Se fores pela abordagem dos sockets, também podes implementar tu, mas o react já tem tudo feitinho :D
Se vires no react/socket, tem um exemplo como usar. Tens o método "on" como callback, aí vais fazer o que te apetecer quando recebes dados.

E ao package da BD é um excelente package, bastante melhor do que usares mysqli/pdo "simples".

Para desenvolvimento web (e não só), Linux para mim é a melhor opção. Não precisas de te mandar de cabeça para vagrant, mas mal também não faz. E o puphpet parece simplificar muito o setup da cousa.

Eu costumo usar só uma VM e configurar à pata, aprendendo sempre qualquer coisa nova.
 
Última edição:
Ah sim eu tinha também assim mas o PhpStorm tem alguns controlos incluídos por isso passei a usar este setup do vagrant.

Mas virtualbox + pasta partilhada com o projecto em windows + instalar manual serve.
 
Back
Topo