我正在制作一个基于Web的多人游戏。考虑到实时性,我确定Websockets是处理通信的最佳方式。客户端使用HTML5画布来渲染游戏,并使用Websockets与主机进行通信。
我选择使用PHP来托管游戏,因为它似乎是托管提供商首选的语言。我之前没有使用过PHP,但在Java中使用了类似Websockets的东西,但非常依赖于多线程。
我已经看过一些关于PHP sockets和多个客户端的教程;但其中大多数做法是为每个客户端fork出新进程。由于我将有一个不断运行的游戏循环,因此我认为这并不适合。
我想要实现的是为每个连接的客户端分配端口,监听新客户端,与当前客户端列表交换数据,并同时运行游戏循环的方法。
我需要帮助的地方如下:
- 如何找到并分配端口给新客户端,通知客户端该端口,并在他们断开连接时清理端口。
- 如何在不阻塞游戏循环的情况下执行上述所有socket事务。接受来自客户端的部分消息并仅对完整消息进行操作是可接受的。
有人能给我一些关于如何实现这些目标的技术建议吗?我认为这不是对PHP的过高要求,但如果我错了,请指出!
以下是我希望服务器端实现的伪代码。没有任何函数应该受阻:
Array clients;
while(gamerunning)
{
CheckForNewClients();
GetStatusFromClients();
DoGameUpdate();
SendGameStateToClients();
}
[更新] 对于任何感兴趣的人,我创建了一个专门支持WebSockets(特别是使用Java和'TooTallNates' WebSocket库)的应用程序,而不是实际的Web服务,因为这似乎更有意义,尽管恰好由于安全问题,大多数Web浏览器已经放弃了WebSockets。