Parse platform 带存储的Pubnub聊天应用程序

Parse platform 带存储的Pubnub聊天应用程序,parse-platform,push-notification,chat,real-time,pubnub,Parse Platform,Push Notification,Chat,Real Time,Pubnub,我正在寻找开发一个聊天应用程序与Pubnub,我想确保所有的聊天信息是发送存储在数据库中,还想发送聊天信息 我发现我可以使用Parse with pubnub来提供存储选项,但我不确定如何设置这两个选项,使聊天中发送的消息和图像存储在数据库中 以前有人用pubnub和parse做过这个吗?有没有其他简单的选项可以与pubnub一起使用而不是使用parse?Sutha 你所寻求的不是一个微不足道的解决方案,除非你谈论的是有限数量的最终用户。所以我不会说没有“简单”的解决方案,但有解决方案 原因是服

我正在寻找开发一个聊天应用程序与Pubnub,我想确保所有的聊天信息是发送存储在数据库中,还想发送聊天信息

我发现我可以使用Parse with pubnub来提供存储选项,但我不确定如何设置这两个选项,使聊天中发送的消息和图像存储在数据库中

以前有人用pubnub和parse做过这个吗?有没有其他简单的选项可以与pubnub一起使用而不是使用parse?

Sutha

你所寻求的不是一个微不足道的解决方案,除非你谈论的是有限数量的最终用户。所以我不会说没有“简单”的解决方案,但有解决方案

原因是服务器需要监听(订阅)每个活动的聊天频道,并将发送的消息存储到数据库中。想象一下,你的应用程序可以扩展到100万用户(甚至不需要那么大,但这个数字应该可以帮助你认识到,如果多个服务器实例正在以非重叠方式收听频道,或者使用重叠但使用服务器队列实施和重复数据消除消息,那么扩展会变得多么棘手)

也就是说,是的,有些PubNub客户已经实现了这样的解决方案——顺便说一句,解析并不是实现这一点的关键

您有三个基本选项来实现此功能:

  • 实施一个解决方案,该解决方案将允许服务器的多个实例在所有通道变为活动状态时订阅它们,并在消息传入时存储它们。要做到这一点有很多细节,所以如果你不能做到这一点,那么这就不可能是你想要去的地方

  • 有一种方法可以通过PubNub Presence Webhook(在按键上启用)监视所有处于活动或非活动状态的频道。您可以使用它来保留服务器将用于按需(而不是完全实时)从中提取历史记录(在密钥上启用)的所有通道的列表

  • 对于每个处于活动或非活动状态的通道,您的服务器将通过REST调用(以及您在服务器上实现的端点,在本例中是您的解析服务器)接收这些事件:

    • 通道激活:在解析数据库中记录“开始聊天”时间标记
    • 通道不活动:在解析数据库中记录“结束聊天”时间标记
    • 非活动事件是使用为该频道录制的开始/结束时间标记从PubNub:
      PubNub.history({channel:channelName,start:startTT,end:endTT})获取频道历史的进程的开始
    • 您需要呼叫,直到收到<100条消息(100是您一次最多可以检索的消息数)
    • 当您检索这些消息时,您将把它们保存到您的解析数据库中
    已添加新的状态webhook:

  • 最后,您可以在每次pubnub.publish调用成功时保存每条消息以解析db。我不是一个解析专家,几乎不知道它的所有功能,但我相信他们有一些排序或存储本地然后同步到云数据库选项(就像StackMob,当它是一个产品时),但即使没有,您将保存消息直接解析云数据库 在JavaScript客户端(在浏览器上)中,代码看起来是这样的(不完整,可能有错误,请找出原因或向PubNub支持部门查询详细信息)

    您甚至可以根据时间间隔、发布次数或总数据的大小存储整个发布集(在对话的两端),但要小心,因为任何一个用户都可能在不通知的情况下退出聊天室和浏览器,您将无法保存。因此,如果有点嘈杂,每次发布保存可能是最佳做法

    我希望你能找到这些技巧中的一种,作为朝着正确方向开始的方法。有一些细节遗漏了,所以我希望你会有后续问题

    只是一些可能有用的其他链接:


    我们也有一个

    Sutha,我不能说有任何“简单”的解决方案,但解析可能会让这更容易一些。我们确实有一些客户不用解析就可以做到这一点,但解决方案并非微不足道。我们很快会回复一些指导。好的,当然,我会等待你对此的回复。我面临的主要问题是保存通过聊天信息发送的数据和图像。图像将上载到服务器并发送链接,但也必须将其存储在消息中。此外,您应该使用PubNub API仅发布指向上载图像的路径(或url),并将实际图像(可能在base64中)分别存储在Parse中。感谢各位,这真的很有帮助。关于通道活动和非活动REST API调用的一个问题是,有没有办法在最后一次活动会话后仅从通道获取新消息?图像路径上的Good point@girlie_mac(例如,使用Amazon S3进行图像存储)。Sutha,是的,您只需要保留上一个活动会话的timetoken,并使用该timetoken作为结束参数(而不是您可能假设的开始参数)保存调用历史记录。让我知道这是否澄清了这一点。Sutha,不知道你所说的“只获取新消息”是什么意思。活动/非活动通道RESTful webhooks只报告通道占用率从0到1(活动)和从1到0(非活动)的时间-不多或少。通过查看通道查询参数,可以筛选出对您重要的通道。如果有帮助,请告诉我。可能最好发电子邮件到support@pubnub.com或者创建一个新的SO帖子。只是对webhooks故事的更新-PubNub现在拥有用于所有状态事件(不仅仅是活动/非活动通道)的webhooks:加入、离开、超时和状态更改。询问support@pubnub.com为您配置这些。
    var pubnub = PUBNUB({
        publish_key   : your_pub_key,
        subscribe_key : your_sub_key
    });
    
    var msg = ... // get the message form your UI text box or whatever
    
    pubnub.publish({
        // this is some variable you set up when you enter a chat room
        channel: chat_channel, 
        message: msg
        callback: function(event){
            // DISCLAIMER: code pulled from [Parse example][4] 
            // but there are some object creation details
            // left out here and msg object is not
            // fully fleshed out in this sample code
    
            var ChatMessage = Parse.Object.extend("ChatMessage");
            var chatMsg = new ChatMessage();
            chatMsg.set("message", msg);
            chatMsg.set("user", uuid);
            chatMsg.set("channel", chat_channel);
            chatMsg.set("timetoken", event[2]);
            // this ChatMessage object can be 
            // whatever you want it to be
            chatMsg.save();
        }
        error: function (error) {
            // Handle error here, like retry until success, for example
            console.log(JSON.stringify(error));
        }
    
    });