草庐IT

php - 需要外部服务器实时轮询的网站架构设计

我有一个游戏在Nec2服务器中运行,每个服务器中都有自己的玩家(假设它是每个服务器中的独立游戏)。为这款游戏开发前端的最佳方式是什么,可以让我获得所有服务器上所有玩家的近乎实时的信息。我最初的方法是:有一个通用的共享托管php网站从每台服务器轮询数据(每台服务器1个套接字)。因为大多数共享解决方案并不真正提供永久套接字,所以这需要我每5秒左右创建和处理一个连接。因为没有这种粒度的cronjob,所以我最终会使用一个不幸的客户的请求来进行此更新。这里有很多错误,让我们考虑最坏的情况。最好的方案(我猜)是使用一些基于python/ruby/phpweb的前端创建小型ec2实例,服务器应用程

php - 长轮询锁定其他 AJAX 调用

我希望进行长轮询以将一些数据“推送”到客户端,并且我还在与长轮询并行地对服务器进行其他不相关的AJAX调用。在长轮询收到响应(来自响应或超时)之前,我的其他AJAX调用似乎不会完成。当我单步执行Javascript时,似乎在适当的时间发送了第二个AJAX请求,但直到长轮询请求获得响应后才收到响应。知道发生了什么事吗?这是长轮询部分的代码:服务器端:functiongetPlaylistTracksIfChanged($playlist_id,$numClientTracks){$reportChange=false;for($i=0;$iPlaylistTrack->find('cou

php - AJAX长轮询,提高效率

一段时间以来,我一直在考虑为我的通知系统进行长轮询的想法,但我一直想不出一种方法来提高我的后端的效率。我见过的大多数实现都保持连接打开,并且php每隔几秒查询一次数据库服务器以查看是否添加了新数据。在我看来,这并不比让javascript重复轮询服务器更好。在任何一种情况下,我的数据库服务器都会被击中数万次,这是可以理解的,并不是特别理想。是否有任何系统可以“提醒”正在执行/休眠的长轮询脚本新数据? 最佳答案 单一系统如果您的应用程序是唯一更改数据库的系统,那么您可以仅在您的应用程序执行更改时触发您的监听器(理想情况下仅针对每个监听

PHP + Comet(长轮询)缩放/主机

我已经使用PHP/MySQL开发了一个应用程序,它使用了cometd技术,presicely长轮询。概念证明效果很好,但我预计流量会快速达到数千个并发连接=网络服务器上有数千个打开的连接。我没有能力设置自己的服务器(例如使用lighttpd),并且通常依赖简单的5美元/月PHP托管其他Web项目。但是,我意识到这些不会起到作用,因为它们并不支持如此大量的同时打开连接。我还有哪些其他选择?我找不到任何专门从事comet应用程序的主机。谢谢 最佳答案 你最好使用专用服务器,这会更贵,但它可以完成工作,我个人喜欢1and1.co.uk,如

php - 如何使用长轮询(最好不用 Comet 或 node.js)?

假设我正在将存储在localStorage中的HTML页面上的文本从计算机A同步到计算机B。当用户在计算机A上编辑文本时,我向服务器发送一个请求,并告诉它更改了哪些文本。有什么方法可以让服务器告诉计算机B有新文本,而计算机B不必继续检查?我读过Comet,但我尽量不使用任何库。有办法吗?另外,如果您要推荐Comet,能否举一个使用纯JavaScript和Comet的简单示例?我有一个想法,但我不知道它是否可行。在计算机B上,我发送了一次请求,让服务器的文件一直延迟响应,直到有一些新文本。这样,就像长轮询一样,但请求最终会超时。如果有办法将超时设置为从不,这会变得容易得多。那么,有人有什

php - Nginx 作为长轮询时的反向代理

我有apache作为后端服务器,它运行php脚本和nginx作为反向代理服务器来处理静态内容。一个php脚本,它给了我一些进程的ID,然后执行这个过程(相当长)。我只需要将那个进程的ID传递给浏览器。//...ob_start();echojson_encode($arResult);//onlythisdatashouldbepassedtobrowser$contentLength=ob_get_length();header('Connection:close');header('Content-Length:'.$contentLength);ob_end_flush();ob

php - 频繁轮询会使服务器重载吗?如果是这样,实现实时更新的最佳方式是什么?

嗯,我不知道哪种方法最有效。谁能帮我找出更好的算法。好吧,让我们举个例子,比如facebook,当用户发布帖子时,它会在没有任何页面刷新的情况下更新给他的friend,我们知道它是通过ajax请求的。但是我们怎么知道有人发布了新东西呢?可能就像每2秒设置一个计时器并发送对某个表的ajax请求并检查是否某个用户发布了某些内容。对吧?但是有没有办法不设置计时器,因为我认为每2秒执行一次操作可能会导致严重的服务器问题?只是想知道是否有更好的方法来代替设置计时器?非常感谢任何帮助。 最佳答案 目前Facebook和谷歌采用的是一种称为lon

php - 简单的PHP长轮询聊天脚本,太简单?

我正在开发一个简单的聊天应用程序,每个房间可能有10到20个用户。查询数据库以获取新消息的脚本对于它将收到的所有请求来说看起来太简单了。下面是循环获取新消息的代码块,脚本的其余部分只是获取变量、查询的构造和json响应对象:$sleepTime=1;//Seconds$data="";$timeout=0;//Querydatabasefordatawhile(!$dataand$timeout上面的block将在10秒内每秒向数据库查询新消息,如果10秒后没有新消息,它将通知浏览器。浏览器等待5秒,然后发送另一个请求获取新消息。但是,如果脚本发现新消息,浏览器将在收到来自服务器的新消

php - jQuery 长轮询(使用 PHP 服务器端)

我在这里有点噩梦,所以任何帮助将不胜感激!首先,我将解释我要做什么:我正在尝试实现一个如下所述的系统:https://stackoverflow.com/a/1086448/1034392在我的本地主机MAMP服务器上使用Yii框架。我有一个函数可以检查数据库中是否有任何新的通知——如果有,它会解析它们并对它们进行json编码。我每5秒在一次while循环中调用这个函数。因此:转到/user/unreadNotifications会触发以下内容Yii::log('test');//tocheckit'sgettingcalled$this->layout=false;header('C

php - 为什么要在长轮询中使用session_write_close?

我在Nolithius阅读了一篇关于长轮询的文章.在PHPsleepacrosstheentiresession部分中,写到应该调用session_write_close函数以防止整个session陷入死锁。这里的死锁到底是什么意思?这是否意味着如果没有这个函数,在客户端打开的同一域中的任何其他页面将无法从其他脚本(如这个)接收AJAX数据,直到这个脚本完成执行并返回结果?为什么会这样?session_write_close在这方面有何帮助?在收到来自该请求的数据后,下次他从该域请求页面时,使用它不会从客户端删除所有个性化设置吗? 最佳答案