我正在尝试使用Express,Socket.io和MongoDB(通过mongoose / node mongo本机驱动程序)创建基于Node.js的应用程序。
我的问题是,除了通过WebSockets建立与客户端的连接之外,我还获得了存储和处理在数据库中最佳的其他信息。然后随着事件的到来,我根据附加信息和套接字寻找客户端,我向这些客户发送通知。
我的问题 - 是否有可能将使用套接字连接创建的对象存储到数据库中?
如果没有,我的想法是将它们与一个额外的变量一起存储在一个数组中,这将允许他们通过数据库中找到的项目查找其他信息。我是对的吗?
客户 - >创建连接 - >发送数据 - >服务器 - >搜索数据库以查找匹配数据 - >匹配套接字到已建立的数据 - >通过已建立的套接字发送通知
此致
答案 0 :(得分:3)
对于通过Google遇到此问题的人来说,似乎现在有一个socket.io-mongo module处理此问题。
答案 1 :(得分:1)
您可以在mongodb中保留一个套接字列表及其所属的节点进程,然后在需要将消息传递到特定套接字时向该进程发送消息。像每条消息一样
{delivery_to:all}或{delivery_to:[1,2,3,4]},其中数字是套接字ID。
但优雅的方法是在mongodb中使用上限集合,并让所有进程监听集合并处理属于该进程的任何消息。可以在此处找到使用mongodb的队列实现的良好描述。
http://www.10gen.com/presentations/mongosv-2011/mongodb-as-a-message-queue
答案 2 :(得分:0)
好吧,我不知道消息队列是否最好,但正如你提到的mongoose。从客户端,您可以使用消息和房间ID(任何唯一的随机ID,必须加入初始连接到服务器或应该注册到服务器,只需创建一个房间)到服务器的http请求,并在服务器中使用mongoose将消息保存到mongodb ,现在使用mongoose schema post方法,在mongoose保存后将消息发送到房间。所以它确实是pub sub