Socket.io私人消息通知

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

我做了编码部分,但我和我的朋友是如此同意添加实时消息通知。 我做了我的研究,我不能说我发现了一个好的文章,其中一些开始于oh you know everything about matrix so lets socketsocketsocketsocketsocket我们感到困惑如何开始,从哪里开始,这是什么,无论如何,许多这个说go with MongoDB never use MySQL again. 老兄是什么? 我正在使用MySQL我在Laravel创build了一个很好的私人消息系统,我想添加实时通知!

我想要做的就是

  1. 用户A发送消息给用户B.
  2. 消息插入到privmsg表中。
  3. sockets或任何你build议的,告诉UserB的浏览器有一个来自UserA的+1新消息
  4. 用户B看到有一个未读的消息,而不刷新他的页面,并点击阅读它。

我怎样才能做到这一点? Socket.io的最佳select呢? 如果是的话,我该如何使用它? 任何片段将是如此之大! 或关于我的情况教程:)

我真的很感激

你有这样的问题:“X总是比Y好,所以总是使用X”。 可能有一个名字…甚至可能是一两本书。 谁知道。 让我们从你的第一个问题开始:

无论如何,这是什么东西呢,很多人说“去MongoDB再也不用MySQL”。 老兄是什么?

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

MongoDB是基于文档的各种数据库,通常称为“NoSQL”(意思是不只是SQL)。 每个“文件”可以有一个完整的结构,完整的节点有孩子和大孩子。 每个文档都可以有自己独特的一组数据。 文件存储在“集合”中。 这种types的数据库有一些优点,对于某些types的操作来说可能相当快。 这就是说,对于其他的东西来说是很糟糕的,例如当你有一堆types完全相同的数据的时候。 像这样的数据库数据聚合速度非常慢(但是它一直在变得越来越好)。

我试图做的一点是,MySQL和MongoDB只是不同的工具,为不同的工作而devise。 不要因为你的朋友告诉你螺丝钉比钉子好,就用螺丝刀敲一下钉子。

我想要做的是:用户A发送消息给用户B; 消息插入到privmsg表中。 套接字或任何你build议,告诉UserB的浏览器有一个来自UserA的+1新消息; 用户B看到有一个未读的消息,而不刷新他的页面,并点击阅读它。

再次,select工具的工作。 知道你的工具是一个好的开始。 Socket.IO意味着在服务器和客户端之间build立一个通信通道。 它提供了类似于networking套接字的function,通常在Node.js服务器和Web浏览器之间使用(但也可以在其他上下文中使用!)。 它的两个主要特点是当Web套接字不可用时(它使之与旧的浏览器兼容),它提供了后备传输,并且它在一些漂亮和简单的调用中包装了一个事件消息传递系统。 你不必担心底层的沟通。 一方面emit和事件,另一方面被解雇。 简单。

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

由于你的消息需要保存,所以将它们存储在数据库中是一个好主意。 我会做什么:

  1. 在发送消息时,将一个副本插入到数据库中
  2. 在插入时, 通过您的发布/订阅通知向集群中的其他服务器发出通知
  3. 任何与获取消息的用户连接的服务器都将从其他服务器看到此通知。
  4. 该服务器会将用户的消息数据从数据库中加载出来并通过Socket.IO发送出去

你想要一个教程? 在Socket.IO主页上的例子是相当不错的: http ://socket.io/