Android网页互动

时间:2014-09-11 15:18:10

标签: android web

假设有两个Android设备和一个网页。

在每个设备上都会点击一个按钮,网页会显示累积的点击次数。

是什么让这成为可能? Android设备是否将数据发送到sql数据库,而该计数器正在读取该数据库中当前的数据? 或者设备真的可以将信息发送到页面吗?

2 个答案:

答案 0 :(得分:1)

设备可以将数据传送到服务器或客户端代码。然后,您必须决定如何处理数据。如果您将其发送到客户端代码,那么它只会在一台设备上更新,而将其发送到服务器将允许在每台设备上单击一个计数器。

更改服务器端的页面会增加缓存问题。所以你可能想要一个数据文件,只需要一个json或服务器每次收到另一次点击时都会覆盖的东西。

这不是非常快,但会导致用户之间出现同步问题。对于标准html页面的初学者,客户端代码负责对服务器的调用,因此我们必须定期检查服务器以查看值是否已更改(例如每5秒)。

更快的替代方案是使用Web套接字。客户端将保持与服务器的连接,并从服务器侦听更新,从而无需定期检查。此外,套接字可用于向服务器发送点击,服务器可以将值保留在其内存中,从而无需文件写入。

可以从http://nodejs.org下载Node.js,这是我用于网络套接字https://github.com/Worlize/WebSocket-Node的插件。

所以这里是一个简单的Web套接字服务器的服务器端代码,它将来自1个用户的消息包括给所有用户,包括发送它的用户。

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>

将第一个代码段保存为&#34; myserver.js&#34; (或类似的)并通过命令行在节点中启动它。将第二个代码段保存为&#34; client.html&#34;并在2台设备上打开它,或者只打开2个浏览器实例。客户端上没有接口,但您可以使用send("message string")

从调试控制台发送和接收消息

如果您可以将头部包裹在我的片段周围,将其修改为像您的示例一样工作应该相当容易!

答案 1 :(得分:0)

要实现您的目标,您需要学习android的套接字编程。

为了使用两个设备(客户端),您还需要学习服务器的端口转发。

要开始尝试此tutorial