Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向现有php网站添加带有node.js的聊天_Php_Node.js_Apache_Chat - Fatal编程技术网

向现有php网站添加带有node.js的聊天

向现有php网站添加带有node.js的聊天,php,node.js,apache,chat,Php,Node.js,Apache,Chat,我有一个网站运行在apache/mysql/php共享服务器上。站点的每个页面都属于一个注册用户,该用户登录后可以编辑该页面。其他非页面所有者的用户只能查看这些页面,但不能执行任何其他操作 现在,我计划将聊天功能添加到我的应用程序中。其基本思想是,如果页面所有者在浏览器中打开页面并登录,他将显示为其他用户(匿名)的“可供聊天”。访问该页面的其他用户将能够向他发送消息,反之亦然。匿名用户不需要相互通信,他们只能与注册用户(页面所有者)通信。所以基本结构是这样的: 匿名用户访问该页面。页面的注册所有

我有一个网站运行在apache/mysql/php共享服务器上。站点的每个页面都属于一个注册用户,该用户登录后可以编辑该页面。其他非页面所有者的用户只能查看这些页面,但不能执行任何其他操作

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

  • 匿名用户访问该页面。页面的注册所有者未查看同一页面,聊天不可用

  • 注册所有者登录并在浏览器中打开其页面。所有实时注册的用户都会被告知所有者现在可以聊天了

  • 匿名用户可以向他发送消息

  • 注册用户接收消息并可以回复每个用户

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

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

    我正在寻求关于如何最好地实施它的建议:

  • 使用老式的php和ajax调用。所以每个用户都会每隔一秒左右向服务器发送ajax请求,服务器会以某种方式跟踪每个会话。我认为相对容易实现。我并不期望有大量的用户,但我可以想象这会对服务器造成很大的负担

  • 使用node.js

  • 现在我的问题是:

  • 上述解决方案1可能存在什么问题。如果服务器不断向其抛出ajax请求,这会不会太沉重?我能接受的用户数量是否合理

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


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

    另一种方法可以考虑使用PubNub这样的实时网络来帮助用户进行用户数据传输。PubNub有一个名为的工具包,它可以帮助告诉谁订阅了或取消订阅了每个频道

    为了满足您的需求,我设想每个用户在登录页面时都会注册到他们正在查看的页面,方法是在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>
    
    Presence还具有一系列漂亮的功能,例如能够让所有用户订阅当前频道:

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

    我希望这有助于你建立你的最低可行的产品。由于一切都是在编程语言级别实现的,因此您应该能够灵活地设计一个可定制的聊天解决方案,而不会增加服务器的额外复杂性或开销。

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

    另一种方法可以考虑使用PubNub这样的实时网络来帮助用户进行用户数据传输。PubNub有一个名为的工具包,它可以帮助告诉谁订阅了或取消订阅了每个频道

    为了满足您的需求,我设想每个用户在登录页面时都会注册到他们正在查看的页面,方法是在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>
    
    Presence还具有一系列漂亮的功能,例如能够让所有用户订阅当前频道:

    pubnub.here_now({
        channel : 'page35',
        callback : function(m){console.log(m)}
    });
    
    我希望这有助于你建立你的最低可行的产品。由于所有内容都是在编程语言级别实现的,因此在创建可定制的聊天解决方案时应该具有很大的灵活性,而不会增加服务器上的额外复杂性或开销