不确定这个问题在这里是否正确,如果不正确,我将删除它。
我正在使用后端AWS EC2创建一个社交网络ios应用程序,我使用php和MYSQL来运行它。
我现在想知道如何将即时消息添加到我的应用程序中,实时有点像firebase。
不确定如何继续或使用什么,也许有某种框架用于mysql,不确定,这就是为什么我想试着从在这一领域有更多经验的人那里获得一些建议……
我不确定如何将我当前mysql数据库中的所有用户详细信息连接到firebase或我所使用的任何服务!
如果任何人能帮助我或把我带到正确的方向,请这样做!
提前感谢!
发布于 2016-11-04 17:26:12
这真的取决于你期望从这里得到多少流量。假设硬件大小合适,配置优化,表结构合理,MySQL完全能够处理每秒数以万计的查询。因此,即使假设每秒轮询一次,也可以在一台服务器上为数千个并发用户提供服务,但在这里,瓶颈将是您的应用程序服务器,而不是MySQL。您会发现,在担心数据库之前,您需要对该层进行扩展。
尽管MySQL可能不是最好的解决方案,但还有其他因素需要考虑:
中存储了一些数据
如果您沿着将一项新技术引入堆栈的道路走下去,请记住可能的成本:
>H119您将必须学习它
您是否准备好应对管理两个数据库所带来的额外复杂性?(数据同步、附加库、分散的专业知识等)
过早优化是万恶之母。
假设InnoDB的一些考虑:
举个例子:
create table message_meta (
id int unsigned not null primary key auto_increment,
message_id int unsigned not null,
recepient_id int unsigned not null,
is_seen tinyint unsigned not null default '0',
seen_at timestamp null,
UNIQUE KEY (recepient_id, message_id),
KEY (recepient_id)
);
create table message (
id int unsigned not null primary key auto_increment,
body varchar(4095),
created_at timestamp not null default current_timestamp,
sender_id int unsigned not null,
KEY (sender_id)
);如果您达到了MySQL被证明是瓶颈的程度,您仍然可以扩展它(复制、分片等)。在那之后,你可以开始使用Redis,在那里有最新的消息,并将MySQL作为永久存储。
发布于 2016-11-09 23:24:31
“即时”源于术语“实时”;客户端代码可用于向服务器发送请求。从头开始编写即时消息应用程序很复杂-有很多事情需要考虑:
基于角色的成员注册和登录(会话authentication)
jQuery是一个免费的、开源的JavaScript框架。您可以使用CDN或下载CDN。发送消息的示例如下所示。
$(document).ready(function() {
var someSharedUniqueCode = 'Both the recipient and sender uses this key to communicate';
var message = 'This is an example message';
$.post('/messages/send/' + message, { communicationKey: someSharedUniqeCode }).done(function(chat) {
if(chat.State) {
$('#' + someSharedUniqueCode).append(chat.Message);
} else {
$('#' + someSharedUniqueCode).append('Some error message');
}
});当然,您需要在.htaccess中设置ReWrite规则,以便为请求(MVC)编写控制器,如下所示。
Router::Map('POST', '/messages/send/[*:m]', function($message) {
$authKey = $_POST['communicationKey'];
if(!$authKey && !$message) { return; } // your code on error
// TODO: Check user is logged in
// TODO: Check user RBAC is able to communicate in this chat
header('Content-Type: application/json');
$message = new SomeMessageController(); // create a controller and modules that access the database
echo json_encode(array(
'State' => $message->setAuthentication($authkey) // example method
->parseMessage($message) // example method
->save() // example method
), true);
}, 'Message Sender');请记住,以上所有信息都应该存储在数据库中,用户只有在登录时才能发送消息,因此您需要添加一个控制器来确保他们已经登录。
如果您不清楚MVC方法,这里有一个开放源码的,其中包含一组很好的文档。
发布于 2016-11-11 00:48:10
我强烈建议使用Firebase作为实时数据库,使用SQL作为静态内容的全部running on a Node.js server (可以在亚马逊网络服务上运行)。
实时消息传递是困难的,没有Firebase,这将是一个漫长的旅程。
如果您设置为不使用Firebase...
1)使用Socket.IO与客户端和服务器进行实时连接,双向传递数据非常容易,而使用REST时,您需要不断地ping服务器以获取新消息(这会占用大量资源,并且不会进行扩展)。
https://stackoverflow.com/questions/40370069
复制相似问题