PHP SSE与PHP WebSockets(Ratchet)

问题描述 投票:2回答:1

我将在几周内开始开发多人纸牌游戏,在那之前,我一直在研究可用的最佳技术。我将在服务器端使用PHP + MySQL,在客户端使用JS / HTML5。游戏还将通过移动浏览器进行播放。

我的游戏的玩法涉及4个或更多用户在一张桌子上玩,每个用户最多可以有30秒的时间进行操作。将有多个桌子可用,并且用户可以同时玩多个桌子。

根据我的研究,每次其他玩家进行操作时,让服务器通过SSE推送数据,将客户端与服务器同步似乎很容易。然后,当当前玩家执行操作时,请求数据将通过XMLHttpRequest从客户端发送到服务器,然后通过SSE同步到其他玩家。

现在,根据我的阅读,这有很大的不足,因为对于每个侦听SSE进程的播放器,连接在服务器上保持打开状态,从而占用大量内存。我将构建的应用程序旨在随着时间的推移在具有现代硬件(8核CPU,64GB RAM)的专用服务器上支持10000个播放器。有人可能会说PHP对此不利,但是这里的争论是如何使用PHP来完成这项工作。

SSE实现的替代方法是使用Websockets(我目前正在检查Ratchet,并设法从doc设置了Chat服务器),但总的来说,我遇到了一些麻烦,使我无法做出决定:

  1. Websockets:建立握手时,与SSE中的连接一样,服务器上的连接也保持打开状态,但是我想这是另一种类型的连接,消耗的内存更少。那正确吗?因此,websockets将更加高效。关于SSE和WebSocket的内存使用情况的任何估计吗?我在某处读到,通过SSE进行的每个连接在APACHE和PHP中将消耗大约20mb。对于10000个用户,这将是200GB(太多)。我希望我是错的。我不知道套接字连接会消耗多少内存。我的意思是一个闲置的人。

  2. SSE会比在插座上消耗更多的电池电量(在手机上),并且会导致更多的网络流量吗?

  3. SSE:如果用户要在两个桌子上玩,我是否需要打开两个SSE进程(每个桌子一个),或者如何告诉SSE进程我是否要为table1或table2请求数据?还是我被迫同时接收所有表的数据?接收用户现在处于活动状态的所有表的数据将不是问题,但我很好奇是否有自定义方法。

  4. 如何处理互联网连接不稳定的人? websocket是否支持自动重新连接?还是需要从客户端手动完成?

我将在几周内开始开发多人纸牌游戏,在那之前,我一直在研究可用的最佳技术。我将在服务器端使用PHP + MySQL,在客户端使用JS / HTML5 ...

php websocket server-sent-events ratchet
1个回答
0
投票

正如我一直在用SSEs阅读有关WebSocketsPHP的越来越多。我找到了上述问题的答案。如果我错了和/或错过了一些东西,请纠正我。

© www.soinside.com 2019 - 2024. All rights reserved.