我正在使用一个大约有100个用户的封闭社区站点(基于PHP),我们实现的功能之一是一个ajax shoutbox,当用户登录时,它在站点首页上充当“聊天室”。开发团队正在使用私有的irc服务器进行协作,在一个渠道中,我们正在运行一个quizbot。我们想出了一个想法,尝试制作一个通过我们的网站连接到irc的web界面,这样我们网站的所有(不懂技术的)用户都可以参加我们的irc测验。
现在,我不是IRC专家,但是我研究了一些PHP-IRC教程,在我看来,为了连接到IRC,PHP需要保持一个开放的连接。这意味着我们需要做一个comet风格的技巧,让PHP脚本在不超时的情况下执行。然而,这意味着如果用户离开页面或者关闭标签,我们就会失去对php执行的控制。如果发生这种情况,我们可能会想出一种方法来停止连接,但即便如此,如果用户导航回到聊天室,也必须重新连接到irc。
我们想要实现的是一种让用户永久连接到irc服务器的方法,即使他们没有登录到该站点。开发团队在我们的一台服务器上都有shell帐户,我们使用screen和irssi来保持连接。我认为通过一个总是连接到irc的shell帐户,php脚本连接到irc应该是可能的。由于我们的用户数量有限,为所有用户设置shell帐户不是问题,但我还没有找出缺失的环节--以某种方式允许php访问的命令行irc客户端。
有人有什么建议吗?
发布于 2010-08-13 12:20:44
一种选择是运行一个BNC,这基本上是一个代理,它将维护与IRC服务器的连接,您的PHP脚本可以在需要时连接到它。您需要设置一种方法来识别用户与BNC软件的PHP会话,设置会话超时等,所有这些都取决于您正在使用的特定软件及其可用选项。
或者,用Python或其他语言编写一个特殊用途的代理来维护PHP会话的IRC连接列表也不难。
您也可能不希望每个PHP会话都有一个IRC连接,IRC通道上的单个持久bot连接可以很容易地在每条消息中包含一个用户名,以标识发送该消息的PHP用户。
https://stackoverflow.com/questions/3473821
复制相似问题