2014-09-11 3 views
1

두 개의 Android 기기와 웹 페이지가 있다고 가정 해 보겠습니다.Android 웹 페이지 상호 작용

이러한 각 장치에는 단추가 클릭되고 누적 된 클릭 수가 웹 페이지에 표시됩니다.

무엇이 가능합니까? 안드로이드 장치가 해당 데이터를 SQL 데이터베이스에 보내고 있고 해당 카운터가 현재 해당 데이터베이스에있는 데이터를 읽었습니까? 또는 장치가 실제로 정보를 페이지로 보낼 수 있습니까?

+0

왜 "2 개의 안드로이드 장치"입니까? –

+0

수에 제한이 없습니다. – user2888590

+0

Android 기기가 웹 서비스와 통신하는 방법을 묻고 있습니까? 웹 사이트에 액세스하는 장치가 어떤 OS와 관련이 있습니까? – germi

답변

1

장치는 서버 또는 클라이언트 측 코드에 데이터를 전달할 수 있습니다. 그런 다음 데이터로 수행 할 작업을 결정할 수 있습니다. 클라이언트 측 코드로 보내면 한 장치에서만 업데이트되지만 서버로 보내는 것은 모든 장치에서 한 번의 클릭 카운터를 허용합니다.

서버 쪽 페이지를 변경하면 캐싱 문제가 발생할 수 있습니다. 따라서 데이터 파일 대신 json이나 다른 클릭을받을 때마다 서버가 덮어 쓰는 데이터 파일을 원할 것입니다.

매우 빠르지는 않지만 사용자간에 동기화 문제가 발생합니다. 표준 html 페이지의 경우 클라이언트 코드가 서버 호출을 담당하므로 주기적으로 서버를 검사하여 값이 변경되었는지 (매 5 초마다) 확인해야합니다.

빠른 대안은 웹 소켓을 사용하는 것입니다. 클라이언트는 서버에 연결을 유지하고 서버에서 업데이트를 수신하여 주기적으로 점검 할 필요가 없습니다. 또한 소켓을 사용하여 서버에 클릭을 보낼 수 있으며 서버는 파일 쓰기가 필요없는 메모리에 값을 보관할 수 있습니다.

Node.js는 http://nodejs.org에서 다운로드 할 수 있으며이 플러그는 웹 소켓 https://github.com/Worlize/WebSocket-Node에 사용됩니다.

그래서 여기에 1 사용자의 메시지를 보낸 사용자를 포함하여 모든 사용자에게 메시지를 앵무새로 보내는 간단한 웹 소켓 서버의 서버 측 코드가 있습니다. "myserver.js"또는 이와 유사한 명령 라인을 통해 노드에서 시동 등

var connections = []; 
var WebSocketServer = require('websocket').server; 
var http = require('http'); 

var server = http.createServer(function(request, response) { 
    // process HTTP request. Since we're writing just WebSockets server 
    // we don't have to implement anything. 
}); 
server.listen(1337, function() { }); 

// create the server 
wsServer = new WebSocketServer({ 
    httpServer: server 
}); 

// WebSocket server 
wsServer.on('request', function(request) { 

    //got a new user requesting a connection, so lets accept and store them 
    var connection = request.accept(null, request.origin); 
    connections.push(connection); 

    connection.on('message', function(message) { //inbound message 
     if (message.type === 'utf8') { 
      // process WebSocket message 
      send(message.utf8Data); //bounce to everyone else 
      console.log(message); 
     } 
    }); 
}); 

setInterval(function(){console.log(connections.length +" :users");},5000); 
//every 5 seconds, tell us how many users we have 

function send(message){ 
    var i = connections.length; 
    while(i--) 
     connections[i].send(message); 
    //send the message to all users 
} 

예 클라이언트 측

<html><head><script> 
var connection, connIsActive = false; 
    // if user is running mozilla then use it's built-in WebSocket 
    window.WebSocket = window.WebSocket || window.MozWebSocket; 

    connection = new WebSocket('ws://127.0.0.1:1337'); 

    connection.onopen = function() { 
     // connection is opened and ready to use 
     connIsActive = true; 
     console.log('Connection loaded'); 
    }; 

    connection.onerror = function (error) { 
     // an error occurred when sending/receiving data 
     connIsActive = false 
     console.log('error'); 
    }; 

    connection.onmessage = function (message) { 
     // handle incoming message 
     console.log(message.data); 

    }; 
function send(message){ 
    if(connIsActive)connection.send(message); 
} 
</script></head></html> 

저장 제 단편. 두 번째 스 니펫을 "client.html"로 저장하고 2 개의 장치 또는 2 개의 브라우저 인스턴스에서 엽니 다. 클라이언트에서는 인터페이스가 없지만 디버그 콘솔에서 메시지를 보내고받을 수 있습니다. send("message string")

예를 들어 귀하의 예처럼 작동하도록 수정하면 머리를 감쌀 수 있습니다.

+0

Node.js는 이동 방법과 비슷합니다. – user2888590

+0

어떤 데모를 제안 하시겠습니까? – user2888590

+0

내가 처음 노드를 시작할 때 썼던 웹 소켓 테스트 코드를 게시 할 것이고, 기본적인 일종의 보내기 및 로그 작업이지만 시작해야한다. 노드와 적절한 웹 소켓 플러그를 설치해야합니다. – nepeo

0

당신이하려는 일을 성취하려면 안드로이드 용 소켓 프로그래밍을 배워야합니다.

두 개의 장치 (클라이언트)를 사용하려면 서버의 포트 전달을 알아야합니다.

시작하려면이 시도하십시오 tutorial.