我正在构建一个移动应用程序,只要服务器有新数据,就可以从服务器接收数据。我正在为我的移动应用程序使用cordova和离子框架,为移动应用程序获取数据的API和服务器使用PHP / MySQL / Apache。
有什么方法可以从我的服务器检索数据(JSON格式),而不是在我的移动应用程序中使用http.get
每隔n秒不断地请求数据?因为我只需要在有新数据时获取,而不是一直有新数据,但有时,在峰值时它每秒都有新数据。 Apache / PHP可以处理这个问题,还是我需要切换到例如nodejs之类的东西?提前谢谢。
顺便说一句,我希望我的移动应用程序能在一秒钟内收到数据。
我的问题与此Receive update from server with mobile framework和https://softwareengineering.stackexchange.com/questions/225589/how-to-refresh-keep-up-to-date-content-in-the-browser-without-overloading-the-se非常相似,但我现在仍然挂着。
答案 0 :(得分:1)
Node.js和Socket.io使得这样的东西几乎是微不足道的,但是你可以用几乎任何web后端来做到这一点。这样做有几个选择,但我尽可能地倾向于websockets。我从来没有使用它,但Ratchet似乎做了你想要的PHP。看看他们的Hello World tutorial,看看如何设置它。
由于您正在使用Cordova,因此websockets是有意义的。以下是使用socket.io的Node.js中的示例实现。
var app = require('http').createServer(handler);
var io = require('socket.io')(app);
app.listen(80);
function handler (req, res) {
// We aren't serving any http requests outside of socket.io.
// Return a 404 error for all other requests.
res.status(404).send('Not found');
}
io.on('connection', function (socket) {
// This is either a new client connection, or a client reconnecting.
// You can use cookies to establish identity and handle reconnects
// differently if necessary.
socket.on('new-content', function(content) {
// persist the file in the database if necessary and resend it to all
// connected clients
socket.broadcast.emit('new-content', content);
});
});
这里我们只是创建一个简单的中继服务器。您可以发送一个'文件'在这种情况下,它只是一串内容,它将被发送给所有其他连接的用户。在这种情况下,您不必继续查询数据库以查找新内容,您可以从客户端传入的内容中触发它。如果您希望离线用户在上线时能够接收该内容,您需要某种持久性和机制来跟踪和处理该内容。
客户端脚本也非常简单。
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io('http://myserver.com');
socket.on('new-file function (content) {
// A new file was sent from the server, do something with the content here.
});
function sendFile(content) {
socket.emit('new-file', content);
}
</script>