我正在创建一个简单的网络游戏,它使用网络套接字为其他所有内容(例如登录系统、用户配置文件等)流式传输更新 HTTP AJAX 请求。不幸的是,我对 mod_python 有点陌生,但似乎我想使用 Sessions 类来跟踪访问者。唯一的问题是 Session 出于某种原因需要 mod_python 请求。有没有办法可以在 mod_pywebsocket 处理程序中使用这些会话,还是我需要推出自己的会话机制?
1 回答
万一有人可以使用它,我发现 mod_python 的会话与 mod_pywebsocket 配合得很好。这里有两个注意事项:
初始化通常,您使用 mod_python 请求构造一个 mod_python 会话对象。幸运的是,mod_pywebsocket 的作者有先见之明,使 Web 套接字请求(您在 web_socket_transfer_data 参数中获得的请求)兼容。这意味着您可以像在 mod_python 中通常那样实例化您的 Session(请参阅文档以获取示例)。这似乎很明显,但对我来说不是。如果您在执行此操作时遇到错误,则说明您做错了其他事情。
会话锁要记住的另一件事是,与给定 ID 关联的会话默认情况下是锁定的,并且锁定会在该会话对象的生命周期内持续存在。这意味着如果您有两个使用来自同一主机的会话的 Web 套接字,则其中一个有永远阻塞的危险。此外,文档指出这些互斥锁可能需要重要的系统资源。它们显然是为服务快速 HTTP 请求而设计的,而不是为面向持久连接的使用而设计的。
修复会话的一种方法是禁用锁定,但这可能不是明智之举。我还没有尝试过,但如果你尝试的话,祝你在这些比赛条件下好运。我所做的是创建仅在短时间内需要的 Sessions,然后在完成后为其分配 None。显然with
子句不适用于这些会话。同样,这并不是非常晦涩难懂,但如果您没有意识到引擎盖下发生了什么,它可能会导致一些头痛。