2013-01-12 43 views
1

我有一个页面,内容是动态获得的php和Mysql.I使用foreach循环来显示所有的内容。Twitter的更新时,新的行被添加到数据库

foreach($data as $key){ 
      echo "<div id="post_content"> $key['post'] </div>"; 
     } 

现在,我得到我的饲料只是因为它是,但,需要刷新此问题的页面,你看到从数据库中新的岗位行之前。 这就是twitter的用途,当你在twitter上,并且你正在关注某人的新帖子时,它会在Feed的顶部显示“1条新推文”,点击它可以添加推文的内容到饲料。 从我的研究中,我发现了一些方法来做到这一点;

  1. Websockets。缺点:跨浏览器兼容性。

  2. 使用AJAX:refresh = setInterval(function(), 5000);缺点:嗯,加载脚本每5秒:/

  3. 有人recomended socket.io给我,我仍然在寻找如何将它与PHP的整合。

我的问题是,是否有任何其他有效的(优先简单和有效的)方式来做到这一点? 任何帮助将不胜感激。

+0

您不想为每个连接设置套接字。我会做AJAX。您可以通过在用户进行一定量的非活动之后不更新调用服务器来改进您的脚本。这将使您的服务器免受非活动用户的攻击。 – Boundless

+0

但是该页面基本上是我的主页,即使对于活跃的用户来说,它仍然是效率低下? – Saff

+0

如果您使用套接字,您将极大地限制您的网站可以同时拥有的用户数量。对于可以打开多少个套接字有一个限制,并且您的服务器必须投入资源来保持这些套接字打开。 – Boundless

回答

2

问题是,任何套接字有关的限制在特定时间点打开的连接数量。所以如果你不打算提供数以千计的并发双工连接,那么你最好使用AJAX和JSON的组合。 我建议你实施轮询间隔。例如,当用户在一段时间后没有活动时,增加间隔或假设没有什么新的事情显示5-10个民意调查,增加间隔,或许每次加倍,直到达到,比方说2分钟。在获取消息或值时,将间隔减少到5秒或更少。

1

最简单的方法是提供某种类型的API,以便以JSON格式访问新的“推文”,然后将它们预先添加到HTML中。
socket.io也是一个不错的选择,因为它结合了多种技术,例如websocket,长轮询等,并且在使用旧版浏览器时可以很好地降级。你可以在网上找到许多关于socket.io的教程。然而,socket.io依赖于node.js服务器端的JS,所以如果你不熟悉这可能会有点复杂。看看这个链接虽然:Using PHP with Socket.io

+0

谢谢,这只是让我承认我必须学习node.js :( – Saff

+0

)你仍然可以通过提供一个JSON API去查找它,然后每隔X秒通过AJAX查询它 – Stefan

+0

嗯,我想过但我猜这样做效率不高,我怎么知道我的托管帐户允许我使用node.js,并且可以推荐一个好的教程?谢谢@stefan – Saff

相关问题