繁体   English   中英

将与node.js的聊天添加到现有的php网站

[英]Adding chat with node.js to existing php website

我有一个使用apache / mysql / php在共享服务器上运行的网站。 该站点的每个页面都属于一个注册用户,该用户一旦登录即可编辑该页面。 不是该页面所有者的其他用户只能查看这些页面,而不能做其他任何事情。

现在,我计划将聊天功能添加到我的应用程序中。 基本思想是,如果页面所有者在浏览器中将其打开并登录,则其他用户(将是匿名用户)会将其显示为“可用于聊天”。 访问该页面的其他用户将能够向他发送消息,反之亦然。 匿名用户不需要彼此通信,并且只能与注册用户(页面所有者)通信。 因此基本结构如下所示:

  1. 匿名用户访问页面。 该页面的注册所有者不在同一页面上,并且无法进行聊天。

  2. 注册所有者登录并在浏览器中打开其页面。 实时通知所有注册用户,所有者现在可以聊天。

  3. 匿名用户可以向他发送消息。

  4. 注册用户收到消息并可以回复每个用户

其他用户可以随时加入并与注册用户聊天。 这一切都是实时发生的,注册用户可以看到谁来访问他的页面然后消失。

现在,在步骤3和4中,我需要知道注册用户是否仍在登录。如果是,则可以将消息进一步传递给目标用户。 如果不是,那么我需要发送一条消息,通知所有者(注册用户)不再可以聊天。

我正在寻找有关如何最佳实施的建议:

  1. 使用老式的php和ajax调用。 因此,每个用户大约每秒钟都会向服务器发送一个ajax请求,服务器将以某种方式跟踪每个对话。 我认为相对容易实现。 我不希望有大量的用户,但是我可以想象这将对服务器造成沉重的负担。

  2. 使用node.js。

现在我的问题是:

  1. 上面的解决方案1可能有问题。 在不断向其抛出ajax请求的服务器上,这太重了吗? 我可以接受的用户数量是否合理?

  2. 在共享主机上使用node js ..假设可以安装它并在单独的端口上运行,我该如何最好地检查注册用户是否仍然登录? 任何想法都将不胜感激。

没错,PHP / Ajax调用会导致大量的服务器负载,特别是如果您的Apache / PHP堆栈需要大量内存来引导时。 实际上,PHP系统中的许多聊天模块(例如Drupal)都将此职责转移到了专门的node.js服务器(您提到的第二种方法)上,以方便扩展。

您可能考虑的另一种方法是使用诸如PubNub之类的实时网络来促进此用户到用户的数据传输。 PubNub有一个名为Presence的工具包,可以帮助告知每个频道的订阅者或取消订阅者。

PubNub Presence演示

为了满足您的要求,我想每个用户都可以通过在您的JavaScript中发出以下调用,在登陆时浏览的页面进行注册:

<script src="https://cdn.pubnub.com/pubnub.min.js"></script>
<script>

    var pubnub = PUBNUB({ 
        uuid : '12345-page35' //You can define this for each user
    })

    pubnub.subscribe({
         channel : 'site-wide-chat,page35', //Subscribe to two channels!
         message : receive_chat,            //Callback function
        presence : user_joined              //Callback function
    })
</script>

当“所有者”登录时,将通知其他用户查看该页面。 您可以这样完成:

    function user_joined(event) {
        if (event.uuid.match(/page35/)) { //You can set your own test here
            // .... admin available for chat
        }
    }

Presence还具有许多漂亮的功能,例如让所有用户订阅当前频道的功能:

pubnub.here_now({
    channel : 'page35',
    callback : function(m){console.log(m)}
});

我希望这可以帮助您构建最小的可行产品。 由于所有内容都是在编程语言级别上实现的,因此在设计可定制的聊天解决方案时应具有很大的灵活性,而又不会增加服务器的复杂性或开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM