我有一个移动应用程序,用户可以通过聊天(仅限用户,而不是聊天室)与对方交谈。
今天,一切都是同步的。我们正在考虑将解决方案转换为更“实时”的方式,可能使用PubNub或Pusher。
我们想知道最好的方法,因为我们的服务器需要存储每条已发送的消息。
我们想到的是:
我的问题是关于服务器,今天我们有一个Nginx / PHP后端。我们希望我们的服务器能够监听所有用户频道,因为我们需要在我们自己的服务器上存储用户发送的消息。
对于用户与用户的通信,我们正在考虑在消息中创建自己的协议。例如。如果用户111想要向用户222发送“hello”,他可以发布“to:222 hello”,这将由服务器检索。
服务器收到此命令后会将“from:111 hello”推送到他自己的频道(即222)。
我在这个设计中看到的问题是我们的服务器需要打开尽可能多的频道,因为我们的数据库中有总用户。
我没有看到更好的方法。
答案 0 :(得分:3)
关于如何做到这一点的建议,请尝试下一步:
所以基本上服务器只在一个频道上订阅并从中接收消息,解析并发送到收件人的频道(你不必在要发送消息的频道上订阅)。
答案 1 :(得分:3)
好消息:您可以轻松编写分配给每个用户的多个不同频道的聊天应用,还可以使用 PubNub的实时网络 - 高可用性全局分布 - 存储服务来保存消息历史记录。使用此服务,您可以从最近的数据中心直接在移动/ Web客户端设备上有选择地加载消息以获取过去的消息历史记录,但您也可以使用Storage Retrieval API将消息加载到您自己的服务器中。让我们看看它如何与以下聊天应用程序一起使用:
订阅 USER_ID
频道名称,以便接收来自其他用户的邮件。还可以从之前的聊天记录加载历史记录。
<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>
这是移动/网络客户端应用上聊天应用的基础知识。现在,您可以轻松地向/从全局提供程序加载/保存邮件。接下来,您将要使用PubNub REST界面从PHP在服务器上加载这些消息。
您将使用REST接口根据需要从PHP后端服务器收集以前发布的消息。您实际上可能不需要此步骤,因为数据存储在PubNub的全球实时网络中,您的消息被复制到许多地理区域,以实现可靠性和高读/写性能。
PubNub存储/历史V2 REST API文档 - https://gist.github.com/stephenlb/d53f4cc3a891c03b478e
http://pubsub.pubnub.com/v2/history/sub-key/demo/channel/my_channel?count=5
[[ “PUB1”, “PUB2”, “PUB3”, “Pub4”, “Pub5”],13406746729185766,13406746845892666]
您还可以使用 PubNub PHP SDK 来帮助解决一些复杂问题。您可以在此处找到PubNub PHP SDK:https://github.com/pubnub/php并使用此示例加载历史记录:
<?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 Storage API:https://gist.github.com/stephenlb/d53f4cc3a891c03b478e - 本指南将帮助您回答有关存储REST API的其他详细信息。
以下是一个群聊,它将帮助您入门,它是使用Bootstrap CSS Framework编写的 - https://github.com/pubnub/real-time-stocks/#simple-embedded-chat-application