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


php infinite loop as a solution to session inefficiency

我正在设计一个web应用程序。我开始在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和表单处理通信的所有方式,都接受一个url,即一个文件的开始,不存在运行php,而不是一个php函数。然而,如果它能做到的话,看起来会很酷。

我甚至不确定我是否足够了解这种方法的所有潜在问题,更不用说如何实现它了,所以我真的可以使用一些对php如何工作以及如何与html, JavaScript和MySQL交互有更好理解的人。

有没有人尝试过或考虑过并抛弃它?有人知道有什么第三方库可以帮上忙吗?我找不到任何迹象,我理解这可能意味着这是不可能的或不切实际的。

p。一个明显的问题浮现在我的脑海中,php文件可能太大(尽管可能有改进的方法),因此加载缓慢,但我认为这可能是值得的。

我不确定你的方法会解决什么,除了浪费RAM和CPU使用。你是说尽量保持会议开放吗?如果是这样,这将不起作用,因为无论何时对服务器进行调用(无论是使用HTTP还是AJAX浏览),它都会单独处理每个请求。

那么你能做什么呢?

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

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