假设我们有一个用户变量$_SESSION['variable']
,在用户访问页面时可以对其进行修改,也可以不进行修改。
假设同一用户打开了多个浏览器窗口,并且以某种方式同时向服务器发出了会话变量更改所导致的请求。
问题:
由于这些更改针对相同的变量,因此服务器如何“排队”这些更改?这里是否可能发生服务器错误?
有没有一种方法可以“锁定”用于读取/写入的会话变量,以便在更改其值之前执行某种状态检查?
编辑 (感谢Unheilig的清理工作)
关于“排队”,我对两个请求同时到达会发生什么感兴趣:
将X更改为1
将X更改为2
我知道这似乎不是现实世界,但是在设计某些东西时我才想到。如果系统允许来自同一用户的太多并发请求,可能会成为问题。
每个单独的PHP会话都“锁定”在对session_start()的调用与对session_write_close()的调用或请求结束之间(以较早者为准)。
大多数时候,您永远不会注意到这种行为。
但是,如果您的站点确实发出许多并发请求*,那么这些请求似乎将按照先到先服务的顺序排队。
要清楚;在典型的Apache / PHP设置中,您的请求将进入服务器并同时启动PHP执行。session_start()调用将阻塞/暂停/等待/排队,因为它正在等待获取会话文件上的文件锁定(或类似的操作,具体取决于您的session_hander)。
因此,要提高请求吞吐量或减少等待的请求:
希望能有所帮助。
J.
* Ajax和Frame / iFrame繁重的应用程序经常会出现此问题。
归档时间: |
|
查看次数: |
1231 次 |
最近记录: |