我正在构建一个系统来显示我一直在开发的web系统上的实时活动,问题是我不太确定如何做到这一点,并使其与AJAX实时。
基本上,我有一个评级表,充满了音乐评级,每当有人喜欢或"+1"一首歌时,我想让它显示在这个实时活动的东西上。
我将从一些代码开始,但我不太确定如何做任何AJAX !有没有人知道我如何通过一个盒子,一次一个"故事"的实时数据流?
将jQuery添加到您的页面中,您可以轻松地使用$.ajax()
。假设你有一个名为ajax.php的PHP脚本,它接受一个名为song_id
的GET
参数。
现在让我们假设您有一个+1链接,其html id
属性以歌曲的id为后缀(引用费率表中的歌曲id)。
<a href="javascript:void(0);" id="like-34" class="like-link">Like</a>
<span id="current-likes-34">5</span>
让我们看看ajax调用quick(当用户点击like链接时触发):
$('.like-link').click(function() {
var songId = this.id.split('-')[1];
$.ajax({
url: '/path/to/ajax.php',
data: 'song_id=' + songId,
cache: false,
success: function(response) {
// update likes
$('#current-likes-' + songId).html(response);
}
});
});
现在,让我们看一下这个任意ajax.php脚本(简化后)的样子:
<?php
// detect AJAX request
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
) {
$songId = (isset($_GET['song_id'] && preg_match('/^[0-9]*$/', $_GET['song_id'])
? (int) $_GET['song_id']
: 0;
// assume a mysql db connection has been established
$sql = sprintf(
'UPDATE rates SET likes = likes + 1 WHERE song_id = %d',
$songId
);
mysql_query($sql); // run update query
// now get current amount of likes and print them out to be used by AJAX response
$result = mysql_query(sprintf('SELECT likes FROM rates WHERE song_id = %s', $songId));
if ($result) {
$row = mysql_fetch_row($result);
echo $row[0]; // print likes
}
}
请记住这都是假设的。PHP脚本根本就不完整。我的例子假设了很多东西,但它应该是一个足够的基础,可以开始。
仅使用LAMP(PHP)堆栈几乎不可能实现这种缩放。有一些可用的web服务可以帮助你实现这一点(扩展)。随便举几个例子:
- http://pusher.com/
- http://x-stream.ly/index.html
- http://beaconpush.com/
都有某种免费计划。老实说,我觉得push有点贵,虽然它很受欢迎。
我认为Beaconpush是这三个中最便宜的,但我不相信它支持SSL,这是非常必要的,当你想要有安全(秘密)的信息通过网络。例如,您可以通过Beaconpush通过有线发送ping,但使用SSL从您自己的服务器安全地检索信息。
最后,x -stream也有相当慷慨的免费计划,支持SSL。如果你需要安全的网络连接,那么我认为x-stream是最适合你的方案,当你的网络规模很大时,它的价格是19美元,但在开始的时候,我认为免费的方案会让你开始。
您也可以使用自托管解决方案,例如http://socket.io或atmosphere只是举几个例子