我正在制作"直播"在我的网站上玩游戏聊天,所以我的管理员可以查看游戏中发生了什么,踢出/禁止作弊等,而不是真正进入游戏。 在(外部)游戏服务器上,我运行用C ++编写的TCP服务器(在linux上),它在队列中存储消息(如聊天等),以便在WWW服务器请求时立即发送一大块数据。是的,我说过WWW服务器。我不想使用JS套接字,因为它需要游戏服务器将数据发送到连接的每个WWW客户端,并且它已经必须处理游戏中的所有玩家,所以我想限制网络开销。
要在网站上显示数据,我将使用jQuery长轮询到一个php脚本,该脚本将以json格式返回任何新消息。由于我想限制网络使用,我想每x秒(或毫秒)启动一个到游戏服务器的TCP连接而不是更少,所以如果我有50个用户用jQuery请求我的php脚本,它只会连接一次获取数据,将其存储在MySQL中,然后将其作为json返回给所有这些用户。 因此,为此我会存储某种"最后更新时间"在MySQL或某个文件中,当用户发出请求时,我会检查PHP是否已经过了足够的时间,并建立与游戏服务器的连接以获取新消息。如果时间不够,它只会从MySQL获取当前数据并将其返回给用户。 我使用共享的www主机,所以我不能做任何php守护进程或任何类似的东西,这也是一个小项目,所以我不想要任何其他外部服务器(node.js等)。
但是,我不完全确定这种方法是否安全。如果让2个用户同时向PHP文件发出请求怎么办?我可以使用一些锁/互斥锁来避免任何问题吗?我可能只是将我的TCP服务器上的连接限制为1,因此如果连接失败,它将继续从MySQL返回数据。 1秒钟的cron工作会更好地适应这项工作吗?它可靠吗?如果cron作业在某些时候失败怎么办。
我描述的方法似乎有一些优点:
即使没人会使用该网站,也会不时执行一项cron作业。虽然PHP时间限制更新只会在用户请求时连接并获取数据。如果没有请求 - 没有与游戏服务器建立连接以允许它休息。
我不确定CRON的可靠性,只要TCP服务器正常运行,我的方法似乎非常可靠。
没有CRON的方法似乎更好(至少对我和我的需求而言),但是它足够安全吗?