PubNub或Pusher,并将数据存储在我自己的服务器上

我有一个移动应用程序,用户可以通过聊天(对用户而言,而不是聊天室)与对方通话。

今天,一切都是同步的。 我们正在考虑将解决scheme转换为更“实时”的方式,可能使用PubNub或Pusher。

由于我们的服务器将需要存储每个发送的消息,我们想知道做到这一点的最佳方式。

我们想到的是:

  • 每个移动应用程序都会使用用户ID作为频道名称创build一个频道。
  • 此频道将用于移动应用程序/服务器通信。

我的问题是关于服务器,今天我们有一个Nginx / PHP的后端。 我们希望我们的服务器能够监听所有用户频道,因为我们需要将用户发送的消息存储在我们自己的服务器上。

对于用户到用户的通信,我们正在考虑在消息内部创build自己的协议。 例如。 如果用户111想要向用户222发送“你好”,他可以发布“to:222 hello”,这将由服务器检索。

服务器收到这个命令后会把“111:hello”推送到他自己的channel(222)。

我在这个devise中看到的问题是,我们的服务器需要打开尽可能多的渠道,因为我们的数据库中有总用户。

我没有看到更好的方法来做到这一点。

作为关于如何完成的build议,请尝试下一件事:

  1. 在自己的渠道上订阅客户
  2. 在一些特定的频道上用不变的名字订阅服务器
  3. 如果客户端A想要将消息发送给客户端B,则应该将其发送到之前订购的服务器的信道上。 也许你将不得不以特殊格式发送,这将允许识别发件人和收件人。
  4. 服务器从客户端Aparsing格式化的消息并将其发送到通道B订阅的通道。

所以基本上服务器只在一个频道上订阅,并从中接收消息,parsing并发送到收件人的频道(你不必在要发送消息的频道上订阅)。

PubNub与消息历史logging聊天

好消息:您可以使用PubNub的实时networking – 高可用性全球分布式存储服务轻松编写一个聊天应用程序,并为每个用户分配多个不同的频道,并保存消息历史logging。 使用此服务,您可以select性地从最近的数据中心上的移动/ Web客户端设备上直接加载消息以获取过去的消息历史logging,还可以使用存储检索API将消息加载到您自己的服务器中。 让我们看看这是如何与以下聊天应用程序工作:

与历史JavaScript源代码聊天

订阅您的USER_ID 频道名称以接收来自其他用户的消息。 还加载以前的聊天logging。

 <script src="https://cdn.pubnub.com/pubnub.min.js"></script> <script>(function(){ // INIT var channel = 'USER_ID-123456'; var pubnub = PUBNUB.init({ subscribe_key : 'demo', publish_key : 'demo' }); // CHAT MESSAGE RECEIVER function chat(message) { // process chat message here... } // LOAD HISTORICAL MESSAGES pubnub.history({ channel : channel, // USER_ID Channel limit : 50, // Load Last 50 Messages callback : function(msgs) { pubnub.each( msgs[0], chat ) } }); // PUBNUB REAL-TIME NETWORK HA-TCP STREAM CONNECTION // FOR RECEIVING INCOMING CHAT MESSAGES pubnub.subscribe({ channel : channel, // USER_ID Channel connect : connect, // Connected - Ready to Receive Messages callback : chat // Callback Processor }); })();</script> 

这是移动/networking客户端应用程序上的聊天应用程序的基础知识。 现在,您可以轻松地将消息加载/保存到全局提供程序。 接下来,您需要使用PubNub REST接口从PHP中将这些消息加载到服务器上。

在PHP后端通过REST API加载存储的消息

您将使用REST接口根据需要从您的PHP后端服务器收集以前发布的消息。 您实际上可能不需要这一步骤,因为数据存储在PubNub的全球实时networking中,您的邮件被复制到许多地理区域,以实现可靠性和高读/写性能。

PubNub存储/历史V2 REST API文档 – https://gist.github.com/stephenlb/d53f4cc3a891c03b478e

REST请求

http://pubsub.pubnub.com/v2/history/sub-key/demo/channel/my_channel?count=5

REST响应

[[ “PUB1”, “PUB2”, “PUB3”, “Pub4”, “Pub5”],13406746729185766,13406746845892666]

您也可以使用PubNub PHP SDK来解决一些复杂问题。 你可以在这里findPubNub PHP SDK: https : //github.com/pubnub/php并加载这个例子的历史logging:

 <?php $pubnub = new Pubnub( "demo", ## PUBLISH_KEY "demo", ## SUBSCRIBE_KEY "", ## SECRET_KEY false ## SSL_ON? ); $history_data = $pubnub->history(array( 'channel' => $channel, 'count' => 100, 'end' => "13466530169226760" )); ?> 

有关PubNub上存储REST API的更多详细信息

请按照以下链接深入探索PubNub存储API: https ://gist.github.com/stephenlb/d53f4cc3a891c03b478e – 本指南将帮助您解答有关存储REST API的其他详细信息。

更多完整的GUI聊天客户端使用历史

以下是一个群聊 – 这将帮助你开始,它是使用Bootstrap CSS框架 – https://github.com/pubnub/real-time-stocks/#simple-embedded-chat-application