php无限循环作为会话效率低下的解决方案

时间:2014-07-29 01:09:52

标签: php session session-variables

我正在设计一个网络应用。我开始在我的php中使用会话变量编写。现在,我发现当我扩展到多服务器环境时,我需要一个解决方案来提高它们的效率。我正在考虑AWS的解决方案,它似乎很好地集成到现有的php会话变量处理中。但是,每次在我的数据库上运行SQL脚本时,我首先需要保存用户连接详细信息的变量。这看起来就像我将至少使数据库查询的数量增加一倍(因为AWS解决方案将在数据库中查询将保留值的数据库)。

自从我意识到我需要持久性变量后,我一直在考虑是否可以采用不同的方法 - 只运行一个PHP脚本,因为如果它永远不会结束那么我永远不会丢失我的全局变量因此他们成为了会议的一部分。变量

我想在一个循环中将所有php代码与函数区分开来:

<?php while (1) {
   $MySQLloginName='fred';   //and more lines like this in no particular order
   //all the rest of my php (except functions) including use of $MySQLloginName etc.
}?>

我的直觉告诉我,这不会起作用,因为据我所知,网页可以与php,Ajax和Form处理进行通信的所有方式,都接受一个网址,即开始一个文件,不存在运行php而不是php函数。但是,如果它可以做到,它似乎很酷。

我不确定我是否已经足够了解这种方法存在的所有潜在问题,更不用说如何实施它了,所以我真的可以对那些对如何更好地理解php的工作原理以及如何与html,JavaScript和MySQL进行交互。

有没人试过这个或考虑过并放弃它?有谁知道可能有帮助的第三方图书馆?我无法找到任何一种迹象,我明白这可能意味着它不可能或不切实际。

PS。一个明显的问题让人想起,php文件可能很大(虽然可能有办法改善这种情况)并因此加载缓慢,但我准备考虑它可能是值得的。

1 个答案:

答案 0 :(得分:0)

我不确定你的方法会解决什么,除了浪费RAM和CPU使用率。你的意思是试着保持会议开放吗?如果是这样,那么无论何时打电话给服务器(无论是使用HTTP还是AJAX进行浏览),它都无法工作,它会单独处理每个请求。

那你能做什么?

  • 如果您可以修改负载平衡服务器,那么将它与服务器一起记录它可能是值得的,它将初始流量发送到并继续将其发送到该服务器。但是,这不是很有效。
  • 您可以手动分配带有随机字符串的cookie作为会话ID,然后将其与您将与$_SESSION一起使用的所有项目一起存储在MySQL数据库中。这可能不会很快......
  • 使用session save path的外部位置。您应该能够在配置文件中设置它。

如果可以的话,第一种方法是最好的,因为将数据保存在本地RAM上是最快的工作方式。我知道它并不总是平等的流量,但除了让每个服务器都有一个特定的任务(即大型计算,CDN,登录,从数据库中提取用户数据等)之外,我还不知道任何其他方法。