Socket.io私人消息通知

时间:2013-01-26 07:25:57

标签: php mysql node.js socket.io laravel

嘿那里有stackoverflow! 我正在与Laravel3开发一个社区,我正在尝试实现一些Facebook风格的私人消息。

我做了编码部分,但我和我的朋友非常同意添加实时消息通知。我做了我的研究,我不能说我找到一篇关于这个的好文章,其中一些以oh you know everything about matrix so lets socketsocketsocketsocketsocket开头我很困惑如何开始,从哪里开始,无论如何这是什么,很多人说{{1老兄,到底是什么?我正在使用MySQL我在Laravel中创建了一个不错的私人消息系统,我想添加实时通知!

我想做的就是

  1. UserA向UserB发送消息
  2. 消息已插入privmsg表。
  3. 套接字或您建议的任何内容,告诉UserB的浏览器有来自UserA的+1新消息
  4. UserB看到有一条未读消息没有刷新他的页面并点击阅读。
  5. 我怎样才能做到这一点? Socket.io最好的选择呢?如果是的话我该如何使用它?任何片段都会如此棒!或者关于我的情况的教程:)

    我真的很感激

1 个答案:

答案 0 :(得分:10)

你有思考的问题“X总是优于Y,所以总是使用X”。它可能有一个名字......甚至可能是一本书或两本书。谁知道。让我们从你的第一个问题开始:

  无论如何,这很糟糕,许多人说“与MongoDB一起再也不会使用MySQL了。”老兄,到底是什么?

你应该停止与任何人说过这段时间。 MySQL和MongoDB是两种非常不同类型的数据库的数据库系统。它们通常被称为基于表格和基于文档的。使用MySQL(许多其他利用SQL的数据库......可能还有一些不使用SQL),您的数据存储在一组非常具体的模式概述的关系表中。此表中的每条记录都符合具有特定类型集的特定字段集。这种类型的数据库非常适合多种数据。

MongoDB是基于文档的各种数据库,通常称为“NoSQL”(意思是非SQL)。每个“文档”可以具有整个结构,包括具有子项和子项的节点。每个文档都可以拥有自己独特的数据集。文档存储在“集合”中。这种类型的数据库有一些优点......对于某些类型的操作来说它可以非常快。这就是说,对于其他事情来说这很糟糕,例如当你有一堆数据完全相同时。像这样的数据库上的数据聚合非常慢(但它一直在变得越来越好!)。

我想说的是,MySQL和MongoDB只是不同的工具,专为不同的工作而设计。因为你的朋友告诉你螺丝比指甲更好,所以不要用螺丝刀敲钉子。

  

我想做的就是:UserA向UserB发送消息;消息已插入privmsg表。套接字或你建议的任何东西,告诉UserB的浏览器有来自UserA的+1新消息; UserB看到有一条未读消息没有刷新他的页面并点击阅读它。

再次,选择工作的工具。知道你的工具是一个好的开始。 Socket.IO旨在建立服务器和客户端之间的通信通道。它提供类似Web套接字的功能,通常用于Node.js服务器和Web浏览器之间(但也可以在其他环境中使用!)。它的两个主要特性是,当Web套接字不可用时(它与旧浏览器兼容)它提供后备传输,并且它在一些简单的调用中包装了一个事件消息系统。您不必担心底层沟通。只有emit和一端的事件,并在另一端触发。简单。

对于服务器和浏览器之间的实际通信,Socket.IO是一个很好的选择。它提供近实时通信。但是,Socket.IO不仅仅是一些可以解决你所有问题的魔法。如果是的话,几乎每个人都没用。

由于您的邮件需要保留,因此将它们存储在数据库中是个好主意。我会做什么:

  1. 在消息发送时,将副本插入数据库
  2. 在插入时,fire a notice over your pub/sub发送到群集中的其他服务器
  3. 与获取消息的用户建立连接的任何服务器都将从其他服务器看到此通知。
  4. 该服务器将从数据库中加载用户的消息数据,并通过Socket.IO
  5. 发出

    你想要一个教程吗? Socket.IO主页上的示例非常好:http://socket.io/