我正在使用一个大约100个用户的封闭社区网站(基于PHP),我们实现的功能之一是ajax shoutbox,当用户登录时,它在网站首页上作为“聊天室”工作开发团队正在使用私有irc服务器进行协作,在一个频道中我们正在运行一个quizbot。我们提出了尝试通过我们的网站建立连接到irc的网络界面的想法,因此我们网站的所有(非技术娴熟的)用户都可以参加我们的irc测验。
现在,我不是IRC专家,但我已经研究了一些PHP-IRC教程,在我看来,为了连接到IRC,PHP需要维护一个开放的连接..这意味着我们需要做一个彗星风格的技巧,让PHP脚本在没有超时的情况下执行。但是,这意味着如果用户离开页面或关闭选项卡,我们将失去对该php执行的控制权。如果发生这种情况,我们可能会找到一种方法来停止连接,但即使这样,如果用户导航回聊天室,也必须重新连接到irc。
我们想要实现的是用户永久连接到irc服务器的方式,即使他们没有登录到站点。开发团队在我们的一台服务器上都有shell帐户,我们使用screen和irssi保持连接。我认为应该以某种方式让php脚本通过一个始终连接到irc的shell帐户连接到irc。由于我们的用户数量有限,为所有用户设置shell会计并不是一个问题,但我还没有找到缺少的链接 - 一个允许以某种方式访问php的命令行irc客户端。
有人有任何建议吗?
答案 0 :(得分:1)
一个选项是运行BNC,基本上是一个代理,它将维护与IRC服务器的连接,并且PHP脚本可以在需要时连接到它。您需要设置一种方法来识别用户与BNC软件的PHP会话,设置会话超时等,这些都取决于您正在使用的特定软件及其可用选项。
或者,用Python编写专用代理或者维护PHP会话的IRC连接列表并不难。
您可能也不希望每个PHP会话有一个IRC连接,IRC频道上的单个持久性僵尸网络连接可以很容易地在每条消息中包含一个用户名,用于标识发送它的PHP用户。