嘿,stackoverflow! 我现在正在使用 Laravel3 开发一个社区,我正在尝试实现一些 Facebook 风格的私有(private)消息传递。
我完成了编码部分,但我和我的 friend 们非常同意添加实时消息通知。我做了我的研究,我不能说我找到了一篇关于这个的好文章,其中一些以 oh you know everything about matrix so lets socketsocketsocketsocketsocket
我很困惑如何开始,从哪里开始,什么无论如何,很多人说 使用 MongoDB 再也不会使用 MySQL。
伙计,这到底是怎么回事?我正在使用 MySQL 我在 Laravel 中创建了一个不错的私有(private)消息系统,我想添加实时通知!
我想做的就是
- 用户A给用户B发送消息
- 消息已插入 privmsg 表。
- 套接字或您建议的任何内容,告诉 UserB 的浏览器有来自 UserA 的 +1 新消息
- UserB 看到有一条未读消息,没有刷新他的页面并点击阅读。
我怎样才能做到这一点? Socket.io 的最佳选择是什么?如果是这样,我该如何使用它?任何片段都会很棒!或关于我的情况的教程:)
非常感谢
最佳答案
您有这样的想法:“X 总是比 Y 好,所以总是使用 X”。它可能有一个名字……甚至可能是一两本书。谁知道。让我们从您的第一个问题开始:
what is this shit anyway, many of this say "go with MongoDB never use MySQL again." Dude what the heck?
你应该停止花时间和那些说这种话的人在一起。 MySQL 和 MongoDB 是两种截然不同类型的数据库的数据库系统。它们通常被称为基于表格和基于文档的。使用 MySQL(许多其他使用 SQL 的数据库……可能还有一些不使用),您的数据存储在一组由非常特定的模式概述的关系表中。此表中的每条记录都符合具有特定类型集的特定字段集。这种类型的数据库非常适合多种数据。
MongoDB 是一种基于文档的数据库,通常称为“NoSQL”(意为不仅仅是 SQL)。每个“文档”都可以有一个完整的结构,包括有子 Node 和孙 Node 的 Node 。每个文档都可以有自己独特的数据集。文档存储在“集合”中。这种类型的数据库有一些优点……对于某些类型的操作来说它可以非常快。话虽这么说,但对于其他事情来说这很糟糕,例如当您拥有一堆类型完全相同的数据时。像这样的数据库的数据聚合速度非常慢(但它一直在变得更好!)。
我想表达的意思是,MySQL 和 MongoDB 只是不同的工具,专为不同的工作而设计。不要仅仅因为你的 friend 告诉你螺丝比钉子好就用你的 Screwdriver 敲钉子。
All I want to do is: UserA sends a message to UserB; Message inserted into privmsg table.; Sockets or whatever you suggest, tells UserB's browser there is +1 new message from UserA; UserB sees there is one unread message without refresh his page and click to read it .
同样,为工作选择工具。了解您的工具是一个好的开始。 Socket.IO 旨在在服务器和客户端之间建立通信 channel 。它提供类似于 web 套接字的功能,通常在 Node.js 服务器和 web 浏览器之间使用(但也可以在其他上下文中使用!)。它的两个主要特性是它在 Web Sockets 不可用时提供回退传输(使其与旧浏览器兼容),并且它在一些漂亮而简单的调用中包装了一个事件消息传递系统。您不必担心底层通信。只需在一端发出 emit
和事件,在另一端触发。简单。
对于服务器和浏览器之间的实际通信,Socket.IO 是一个很好的选择。它提供近乎实时的通信。然而,Socket.IO 不仅仅是可以为您解决所有问题的魔法。如果是的话,对几乎每个人来说都毫无用处。
由于您的消息需要持久保存,因此将它们存储在数据库中是个好主意。我会做什么:
- 发送消息时,将副本插入数据库
- 插入时,fire a notice over your pub/sub到集群中的其他服务器
- 任何连接到接收消息的用户的服务器都会看到来自其他服务器的通知。
- 该服务器将从数据库中加载用户的消息数据并通过 Socket.IO 发送
你想要教程吗? Socket.IO主页上的例子相当不错:http://socket.io/
关于php - Socket.io私信通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14534857/