【问题标题】:How can I simulate a peer-to-peer communications channel using PHP, MySQL DB and JavaScript?如何使用 PHP、MySQL DB 和 JavaScript 模拟点对点通信通道?
【发布时间】:2011-11-06 09:26:03
【问题描述】:

我面临的挑战是仅使用标题中提到的技术来模拟网站(例如游戏网站)的两个用户之间的通信渠道。

最近我开发了一个在线国际象棋网站,其背后的想法是让用户也有机会玩“现场”比赛,而不仅仅是让你下棋的冗长比赛,然后在 1-15 回来几天看看你的对手有没有回应。这个游戏引擎的工作方式意味着向服务器发送异步请求,既可以更新与游戏相关的信息(以防你移动),也可以验证是否有任何变化(如果你正在等待对手移动)。

为了更好地解释这一点......轮到它的玩家(当然是浏览器)发送一个异步。请求更新游戏信息,确切地说是在他采取行动的时候。同时,对手发送 PERIODIC 请求,“询问”是否有任何变化。如果有任何变化,则在董事会更新后角色切换。

计时器是引擎功能的后盾,所以我的问题是:你将如何模拟两个玩家之间的 com 频道,同时尽量不对服务器施加太大压力,同时还要更新游戏尽可能快,以保持对它的“活着”的感觉。这在 1 分钟游戏(可用类别之一)中最为重要。因为在这种情况下,请求需要经常发生(至少 1 秒)。但是服务器响应可能会延迟,当同时有数百个游戏可用时,服务器会承受很大的压力等等......所以你看到了我的问题。

如果您有任何好的想法,我期待收到你们的来信并挑选您的大脑:)

干杯! 安德烈

PS:如果你想试试,名字是e-chess960.com

【问题讨论】:

  • 查看 node.js 和 socket.io

标签: php javascript mysql ajax


【解决方案1】:

您真正想要的不是每秒都拉动服务器,而是保持连接打开并使用observer-pattern 将更新分发到特定客户端(换句话说:推送而不是拉取)。这样,您的服务器资源将不会被每秒和每个客户端的新连接所淹没。实现这一目标的图书馆是彗星图书馆。查看这个不错的 tutorial 以获取示例应用程序。

【讨论】:

  • 我没有降级任何人的投票。还是这个问题不是针对我的?
  • 它不是针对您,而是针对那些没有解释原因而降级的人(这是 IMO 的粗鲁行为)。您查看教程和彗星图书馆了吗?
  • 我注意到我还没有投票的机会。没有足够的“声誉”:))无论如何,我浏览了你链接到的教程,但这似乎不是我需要的。因为可以同时有数百个游戏,当然不同的游戏,它们关联的信息完全不同。从我在教程中读到的内容来看,彗星被用来向所有连接的客户端广播相同的数据……但我看不出与我的问题有什么关系,抱歉。请解释一下。
  • @nadrei-oniga:您不会将所有数据发送给所有客户,而只会发送给那些对观察到的主题感兴趣的人。假设您有四个客户 1、2、3、4 玩游戏 A,而 3、4、5、6 玩游戏 B,那么 1-4 将声明观察 A,而 3-6 将声明观察 B。因此,1 和 2 只会从游戏 A 中获得更新,3 和 4 会从两个游戏中获得更新,而 5 和 6 只会从游戏 B 中获得更新。所以简而言之,您只在一个主题的观察者之间共享数据- 如果你有几个游戏,你就有几个科目。我希望能把它清理干净。
  • 我已经理解的示例“示意图”。但这不是真正的问题。目前,据我所知,服务器应该不断检索有关网站上所有活动游戏的信息(可能有数千个!)并将该信息广播给所有连接的客户端。即使每个客户端都被设置为“收听”特定游戏(用户正在观看的游戏),这如何解决服务器上的压力问题?
【解决方案2】:

您想构建一个套接字服务器。 node.js 将是一个很好的基于 javascript 的库,可用于套接字服务器。每个客户端都会创建到套接字服务器的套接字连接,然后当客户端向套接字服务器发送消息时,套接字服务器可以立即将消息发送回其订阅者,而无需将其存储在任何地方。

套接字服务器需要套接字访问,这通常需要 vps 而不是共享服务器。

要使解决方案有效,您需要客户端能够创建与您的服务器的套接字连接。一些浏览器已经可以作为 html5 的一部分,但还不是全部。您还可以使用 Flash 作为一种创建套接字连接的方法。

【讨论】:

  • +1 用于 node.js。将 socket.io 与 node.js 结合使用,以实现全双工通信的跨浏览器兼容性。这与提到的两个库有关。
  • 好吧,我不得不承认,从我所读到的内容来看,这是一项非常棒的技术。我过去遇到过 Node,但没有意识到它是什么,所以我转过头去。直到现在……我相信这正是我正在寻找的那种技术。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 2021-09-09
  • 2019-06-11
  • 1970-01-01
  • 2012-08-11
相关资源
最近更新 更多