websockets和社交关系

我试图用node.js,express和socket.io构build一个小应用程序,它涉及处理基本的社交关系。 有多个用户,你可以请求和他们交朋友,接受他们的请求,拒绝他们,和不友好的用户 – 基本上,很像Facebook。 如果用户Alogin,并且用户B请求与他的友谊,我想立即通知用户A关于该朋友的请求。 这是websocket(和混淆)进来的地方。

  1. 每个用户将有三个不同的套接字连接,对应于三个数据集合? (1)朋友,(2)接收到的请求,(3)发送请求

  2. 当用户接受收到的请求时,需要通知其他用户他的发送的请求已被接受。 这是否需要触发其他用户的套接字上的事件? 如果由于用户不在线而导致该套接字不存在,该怎么办?

道歉,如果有困惑,但我很难理解如何概念化套接字之间的关系。

如果你阅读“发布/订阅模式”(“pubsub”),所有这些(包括上一个答案)将变得更加清晰。 这种模式的基本方面是:

1)你有“人”(“说话人”),每个人都有“可以说”的东西,可能会引起别人的兴趣。

2)你有“人”(“听众”),他们每个人都想“听”一些其他的“人”(尽pipe很less只有任何人;他们中的大多数都是挑选他们听的人,不堪重负)。

发布/订阅模式描述了如何将谈话者与听众“连接”,使得谈话者不需要跟踪他们的听众是谁,听众也不需要跟踪哪些谈话者他们决定倾听(即他们不必“听到”每个人的谈话,并试图过滤这个骚动到什么利益)。

正如MagicDev指出的那样,这通常涉及一个对象,其数据部分跟踪谁在倾听哪个讲话者,哪些方法允许讲话者说“我在说这个主题”(“发布”),听众说“I当(说话人名单或“任何人”)谈论某个主题(这可能是“任何主题”)时要被通知。

“朋友关系”通常意味着“人”A成为“人”B的“说话人”,作为“倾听者”,反之亦然。 然而,pubsub模式并没有规定这种对称性, 一个好的实现会让你用同样的方法来build立“广播”和“对话”。

您可以将每个套接字设置为具有对应于特定用户数据的套接字的对象 。 如果你不熟悉对象和其他结构化数据,这是非常重要的,如果没有这些,你就不会走得太远。

你将有一个对象称为用户将包含每个用户id在一个数组,然后将保存每个用户信息的ID包括朋友,请求等数组。

由于数据在服务器端被保存,所以即使客户端的用户closures套接字,数据已经被传递给variables并保存在服务器端。


如果你不熟悉的话,完全在节点中完成这个工作需要付出相当大的努力,首先我会先用mysql数据库构build应用程序,然后在应用程序中保存数据。