所有HTTP响应都要求客户端启动它们,甚至是使用AJAX创建的响应.但是,GMail的聊天功能可以接收来自其他用户的消息,即使我只是坐在舒适的电脑椅上观看但没有与浏览器交互.他们是如何做到的呢?
对于需要刷新以设置间隔呈现给用户的部分数据的简单webapp,使用setInterval()从端点获取JSON而不是使用适当的轮询框架是否有任何缺点?
为了举例,我想说我每5秒刷新一次处理作业的状态.
我正在尝试实现类似Facebook的实时通知系统,以便在有人将其添加为朋友时通知用户,例如他们的帖子或帖子回复他们的评论.
所有的数据库和PHP部分都已完成,但我无法弄清楚如何像Facebook那样实现它.
每当有人喜欢/评论Facebook上的帖子时,屏幕左下角会出现淡蓝色框.只要有人点击按钮或在Facebook上发表评论,就会发生这种情况.我想知道我应该怎么做来实现这一点.
使用YUI或任何JavaScript框架,我可以在n几秒钟后查询数据库表以检查通知.这种方法太重了.
我想知道是否有任何服务器端模块或脚本可以完成,以便每当我的数据库表中有新的通知条目时,服务器将告诉该特定客户端.这样就可以完全避免从客户端到服务器的不必要的请求调用,并且系统可以有效地为一次有超过50,000个用户的网站工作.
我怎样才能做到这一点?
对于需要快速刷新数据的应用程序,使用JavaScript轮询服务器的最佳做法是什么?我正在使用jQuery作为前端,使用Java Spring Framework作为后端.
刷新数据的示例可以是非常快速地(每1秒)更新的项目列表.
我目前正在进行一项使用Server-Sent Events接收消息的聊天.但是,我遇到了一个问题.服务器发送的事件从未连接并保持挂起状态,因为页面未加载.
例如:
<?php
while(true) {
echo "data: This is the message.";
sleep(3);
ob_flush();
flush();
}
?>
Run Code Online (Sandbox Code Playgroud)
我希望每隔3秒,"数据:这就是消息." 将被输出.相反,页面只是不加载.但是,对于服务器发送的事件,我需要这种行为.有没有办法来解决这个问题?
编辑:
完整代码:
<?php
session_start();
require "connect.php";
require "user.php";
session_write_close();
echo $data["number"];
header("Content-Type: text/event-stream\n\n");
header('Cache-Control: no-cache');
set_time_limit(1200);
$store = new StdClass(); // STORE LATEST MESSAGES TO COMPARE TO NEW ONES
$ms = 200; // REFRESH TIMING (in ms)
$go = true; // MESSAGE CHANGED
function formateNumber ($n) {
$areaCode = substr($n, 0, 3);
$part1 = substr($n, 3, 3);
$part2 = substr($n, 6, …Run Code Online (Sandbox Code Playgroud) 我想知道它是如何在Gmail中实现的,每次收到电子邮件时,邮件列表都会自动刷新.看起来服务器正在向浏览器发送某种事件,但它怎么可能呢?或者也许它很简单:浏览器每次让我们说2秒钟就向服务器询问新消息?但它可能会破坏性能......
有人有想法吗?
编辑:好的,如果这是简单的答案,他们如何管理性能?当我从其他帐户向Gmail帐户发送电子邮件时,视图几乎立即"刷新".你说的是一个返回true/false的简单函数,但它必须有一些逻辑(db连接或读取一些文件).他们如何管理它?
我的意思是他们使用乒乓消息来获取用户连接信息吗?简而言之,他们如何知道在哪里发送即将到来的请求?
我在这里做了一个噩梦,所以任何帮助都将非常感激!首先,我将解释我要做的事情:
我正在尝试使用Yii框架在我的localhost MAMP服务器上实现如下所述的系统:https://stackoverflow.com/a/1086448/1034392.我有一个函数来检查数据库中是否有任何新通知 - 如果是,它会解析它们并且json对它们进行编码.我每隔5秒就有一个while循环调用此函数.
所以:转到/ user/unreadNotifications会触发以下内容
Yii::log('test'); // to check it's getting called
$this->layout=false;
header('Content-Type: application/json');
// LONG POLLING
while (Yii::app()->user->getNotifications() == null) {
sleep(5);
}
echo Yii::app()->user->getNotifications(); // prints out json if new notification
Yii::app()->end();
return;
Run Code Online (Sandbox Code Playgroud)
这很好用 - 去了浏览器中的链接并验证了json响应 - 一切都很好.
然后我尝试了各种各样的jQuery东西让它工作......我发现工作的唯一方法是使用$.ajax类型POST,但只有当有等待通知时(所以返回一些json).$.get或者$.post被"中止"(在firebug中显示)但是URL被调用(因为我可以看到日志文件被更新) - 奇怪.
我使用的原始设置$.get是:
<script type="text/javascript">
function notificationPoll() {
$.get('<?php echo Yii::app()->createUrl('user/unreadNotifications') ?>','', function(result) {
$.each(result.events, function(events) {
alert('New Notification!');
});
notificationPoll();
}, 'json');
}
</script>
<script …Run Code Online (Sandbox Code Playgroud) 我想为新闻门户建立一个评论系统.
我希望jQuery AJAX检测是否有人添加了评论数据,它会自动更新slideDown动作中添加的评论.
我怎样才能做到这一点?谢谢.
(注意:我使用ASP.NET作为服务器)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function () {
$.ajax({
url: 'WebForm1.aspx',
success: function (data) {
$("#Urunler").html(data);
}
});
});
</script>
<style>
li
{
width: 100px;
height: 30px;
background: yellow;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<ul id="Urunler" runat="server">
</ul>
</div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是背后的代码,
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
namespace WebApplication2
{
public partial class WebForm1 : System.Web.UI.Page
{
SqlConnection cnn = new …Run Code Online (Sandbox Code Playgroud) 基本上,我是专业的PHP开发人员.我只有使用PHP开发网站的经验.我没有创建移动应用程序的经验.
我的组织希望建立一个网站(使用PHP)以及移动应用程序(在Android和iOS中),为某些社区创建社交网络,这将完全类似于Facebook网站和Facebook应用程序的功能.
但是我没有从哪里开始?怎么开始?我应该遵循什么方法?如何利用PHP来完成所有这些工作?
我想知道Facebook网站和Facebook应用程序如何协同工作?我想知道这种现象是什么,系统架构,原理,设计模式,技术和其他东西背后都在起作用?
我在我的笔记本电脑上使用Facebook网站,在Android智能手机上使用Facebook 应用程序
每当我在Facebook上收到任何通知时,它几乎会在Facebook网站和Facebook应用程序上同时得到通知.
此外,每当我更新我的状态或做任何活动,如回复或评论帖子,添加组更新,添加事件更新等,从Facebook网站,它立即反映到Facebook应用程序,它发生在副 - a - 时尚.这也很顺利.
根据我的理解,Facebook网站和Facebook应用程序必须使用相同的数据库来存储和访问数据,但我仍然没有得到他们如何协同工作,因为Facebook网站和Facebook应用程序的代码库是完全不同的东西性质?此外,Facebook网站和Facebook应用程序的执行方式是两个完全不同的东西.
在Facebook应用程序已使用不同的技术(例如Android,iOS设备的Windows Phone,黑莓等)和内置的Facebook网站已经使用PHP和所有其他的东西,建但他们仍然在同步协同工作.
将不同技术相互同步工作背后的现象是什么?
而且我对各种网站和应用程序(如Gmail,LinkedIn等)都观察到同样的事情.他们是否也像Facebook一样处理同样的现象?
请指导我正确的方向.作为PHP开发人员,我对这个项目的方法应该是什么以及如何?
谢谢.
php facebook social-networking mobile-application facebook-apps