2

亲爱的开发人员,一天中的美好时光!

我不是任何一种网络编程专业人士,但碰巧我不得不在 php 上开发套接字服务器(无法使用 Java),用于 Flash 多人浏览器游戏(标准功能,如位置、团队战斗等)。


主要问题是TCP是点对点协议,它完全占用给定端口。

当然,可以创建某种队列来管理与套接字的连接,但这种解决方案似乎不是最合适的。

在我看来,使用“公平”端口的间隔(例如,从 2000 到 2200)是更合适的解决方案,因为一个请求可能需要很长时间才能执行,并且玩家不会乐意在队列中等待。

但是我该如何实施这种“端口间隔”策略呢?我看到的解决方案是:

  • 每个端口启动 php-script(嘿嘿,2 数百个已启动的脚本!);

  • 以某种方式将初始进程分叉到新进程(2 数百个已处理?也不好),每个端口一个;

  • 额外的while循环,它监听所有端口(看起来很糟糕);
  • 使用线程或类似的东西(据我所知,问题是php是单线程的;pcntl?)。

但不知何故,我不喜欢它们中的任何一个,或者至少不知道如何以最好的方式实现它们。

没有延迟地处理每个时间单位来自多个用户的多个请求的最佳现有策略是什么,以及如何在 php 中实现此策略?我们有自己的 Debian 服务器,因此可以使用任何所需的 php 扩展。

高度赞赏有关此类系统的开发、规划和实施的任何建议。

谢谢你!


编辑1: 顺便说一句,我忘了提一些额外的细节。

例如,如果我们正在尝试开发聊天应用程序,我们需要为每个用户提供某种固定的(我的意思是持久的)连接。例如,我们有 80 个用户在聊天,然后其中一个人发布了一条消息,该服务器尝试处理并发送给所有其他连接的用户,还将一个条目放入历史文件或类似的东西。

在这种情况下,每 10 秒轮询一次服务器以获取来自 80 个用户中的每个用户的新消息是疯狂的,因此持久连接的需求变得显而易见。但考虑到并非所有请求都是即时处理的,我不知道实现此类事情的最佳方法是什么。

4

2 回答 2

1

你看过http://www.smartfoxserver.com/http://www.electro-server.com/ 吗?

于 2009-11-05T18:12:51.363 回答
1

Flash 多用户通信的最佳方式是 RTMP。寻找 FMS 或 Red5。它不在php中,但我认为这是正确的方法。

于 2009-11-05T18:22:33.343 回答