我正在创建一个游戏,用户正在移动主对象(左/右/上/下)。每当他移动它时,他都会向服务器发出请求,因此PHP会将播放器的位置放在地图上。
游戏速度非常快,用户应该每秒移动2-3次,经过196-200请求后我通常会收到错误,并且无法连接到服务器大约3-5分钟,这不是好。
考虑到我可以完全访问控制面板并且无法更改请求频率,我该如何解决此问题?
答案 0 :(得分:1)
有时,您的HTTP服务器或防火墙会阻止这些请求以防止DDoS攻击。
要解决该问题,您可以使用Websocket(https://en.wikipedia.org/wiki/WebSocket)代替ajax调用。
对于每个ajax调用,浏览器将执行以下步骤:
请求1:
- Open Connection
- Do Request
- Get Any Response
- Close Connection
请求2:
- Open Connection
- Do Request
- Get Any Response
- Close Connection
但是如果你使用websockets,你可以:
- Open Connection
- Do Request
- Do Request
- Do Request
- Do Request
- Do Request
- Do Request
- Get Any Response
- Do Request
- Do Request
- Do Request
- (...)
关闭步骤仅在您更改页面,关闭浏览器或强制通过API关闭Websocket连接时执行。
该解决方案仅针对这些场景创建,并且有一些HTML游戏引擎使用多人游戏解决方案(例如http://www.isogenicengine.com/)
对于PHP,您可以使用Ratchet(http://socketo.me/)或PHP-websockets(https://github.com/ghedipunk/PHP-Websockets)实现。
我希望它有所帮助