Socket.io 私信通知

Posted

技术标签:

【中文标题】Socket.io 私信通知【英文标题】:Socket.io private message notification 【发布时间】:2013-01-10 04:29:39 【问题描述】:

嘿,***! 我正在使用 Laravel3 开发一个社区,我正在尝试实现一些 Facebook 风格的私人消息传递。

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

我只想做

    UserA 向 UserB 发送消息 消息插入到 privmsg 表中。 Sockets 或任何你建议的东西,告诉 UserB 的浏览器有来自 UserA 的 +1 新消息 UserB看到有一条未读消息没有刷新他的页面并点击阅读。

我怎样才能做到这一点? Socket.io 的最佳选择是什么?如果是这样,我该如何使用它?任何 sn-ps 都会很棒!或关于我的情况的教程:)

真的很感激

【问题讨论】:

***.com/questions/12216787/… 的可能重复项。另外,请阅读 Laravel 论坛上的 this thread 以获得更多关于实现实时通信的建议。 我确实做了我的搜索,但从未结束过这个问题:|不过谢谢:) 【参考方案1】:

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

这到底是什么鬼东西,很多人说“使用 MongoDB 永远不要再使用 MySQL”。哥们什么鬼?

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

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

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

我要做的就是:用户A向用户B发送消息;消息插入到 privmsg 表中。套接字或您建议的任何内容,告诉用户 B 的浏览器有来自用户 A 的 +1 新消息; UserB看到有一条未读消息没有刷新他的页面并点击阅读它。

再次,为工作选择工具。了解您的工具是一个好的开始。 Socket.IO 旨在建立服务器和客户端之间的通信通道。它提供了类似 web-socket 的功能,通常在 Node.js 服务器和 web 浏览器之间使用(但也可以在其他上下文中使用!)。它的两个主要特性是它在 Web Sockets 不可用时提供后备传输(使其与旧浏览器兼容),并且它在一些漂亮而简单的调用中封装了一个事件消息传递系统。您不必担心底层通信。只是emit 和一端的事件,另一端被触发。很简单。

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

由于您的消息需要持久化,因此将它们存储在数据库中是个好主意。我会做什么:

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

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

【讨论】:

这很好地解释了问题中包含的一些陈述。但是,我认为 OP 可能很难将 Larvel 与 Socket.IO 结合起来。我将在问题的评论中添加一些相关链接。 uhmm @Brad 我有一个问题:我的项目依赖于线程和帖子。它是一个社区,但只是为了发帖和发帖而已,但它在我的国家非常受欢迎,我收到了 700 万个帖子,2 万用户。我应该坚持使用 MySQL 还是 NoSQL 系统更适合这份工作? @AkainuLionheart,您的用户规模多少有些无关紧要。重要的是数据的结构。对于传统的关系数据库而言,您所拥有的听起来不错。现在,如果您开始发现您的INSERT 速度对于您拥有的所有索引来说都是一个真正的问题,那么也许可以考虑使用 NOSQL 系统。 @Brad 感谢您的精彩解释。你介意帮我看看这个问题。真的很感激。***.com/questions/65682609/…

以上是关于Socket.io 私信通知的主要内容,如果未能解决你的问题,请参考以下文章

使用 socket.io 更新使用通知

如何使用 Express、AngularJS、Socket.io 广播和获取通知?

如何在 Socket.io 中向特定用户发送通知

通知系统 - Socket.io 还是 Ajax?

无法接收通知 - 带有 Socket.io 的 Laravel

使用 express.js 和 socket.io 构建推送通知系统的最佳方法