我正在构建一些 webapp 并实现了长轮询(以及我的数据库中的命令队列),因此我的服务器可以异步向我的客户端发送命令等。命令被编码为 json 并通过 ajax 调用发送给客户端到服务器,并通过服务器到客户端的长轮询方式。
一切正常,直到我在 ajax.php 文件中包含我的“身份验证模块”。该模块包装会话内容并调用 session_start()。
问题是,我的长轮询例程最多可以等待 21 秒,然后再返回客户端。在此期间,服务器不会从同一会话运行任何内容。而是在长轮询 ajax 调用返回后立即执行。
我知道每个会话一次可能只有 1 个线程,并且请求排队。
现在的问题是:解决这个问题的最佳方法是什么?是否有一个设置允许每个会话有多个线程(在我的情况下,3 个就可以了)。或者我应该只是发送告诉客户他的 SessionID 是什么(我的数据库中有一些会话表,以跟踪哪个用户连接到哪个会话)。然后客户端可以将它与任何 ajax 调用一起发送,这样就可以绕过身份验证模块。
在后面的选项中,我担心它会因为最终的会话欺骗而引发一系列安全问题。我需要向每个会话发送一个“随机字符串”,以确保你不能太容易欺骗,但即便如此,它也不完美......
感谢您的遮阳篷:)
尼古拉斯·高蒂尔