假设有两个Android设备和一个网页。
在每个设备上都会点击一个按钮,网页会显示累积的点击次数。
是什么让这成为可能? Android设备是否将数据发送到sql数据库,而该计数器正在读取该数据库中当前的数据? 或者设备真的可以将信息发送到页面吗?
答案 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)