websockets和社会关系

时间:2012-07-27 03:23:17

标签: sockets node.js express socket.io

我正在尝试使用node.js,express和socket.io构建一个小应用程序,它涉及处理基本的社交关系。有多个用户,您可以请求与他们成为朋友,接受这些请求,拒绝他们,并与用户取消联系 - 基本上,就像Facebook一样。如果用户A已登录,并且用户B请求与他建立友谊,我希望立即通知用户A有关该朋友请求的信息。这就是websockets(和混乱)的用武之地。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

您将拥有一个名为users的对象,该对象将在数组中包含每个用户 id ,然后通过id保存每个用户信息,包括朋友,请求等数组。

由于数据保存在服务器端,即使用户在客户端关闭套接字,数据也已传递给变量并保存在服务器端。


如果您不熟悉,在节点中完全执行此操作将需要相当多的努力,我将首先使用mysql数据库构建应用程序,然后在应用程序中保存数据。

答案 1 :(得分:1)

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

1)你有“人”(“说话者”),他们每个人都有“想说些什么”,可能会让别人感兴趣。

2)你有“人”(“听众”),他们每个人都“倾听”其他“人”(虽然很少见到任何人;他们中的大多数人都很挑剔他们听谁,如果只是为了不要被淹没。)

发布/订阅模式描述了如何将讲话者与听众“连接”,使讲话者不必担心必须跟踪他们的听众,并且听众不必担心必须跟踪他们决定听哪些说话者(即他们不必“听到”每个人都在说话,并试图将骚动过滤到他们感兴趣的东西)。

正如MagicDev所指出的,这通常涉及一个对象,其数据部分跟踪谁在听哪个说话者,哪个方法允许说话者说“我正在谈论这个主题”(“发布”)和听众说“我希望在(谈话者或”任何人“列表)谈论某个主题(可能是”任何主题“)时得到通知。

“朋友关系”通常意味着“人”A成为“人”B的“说话者”作为“听众”,反之亦然。然而,pubsub模式中没有任何东西要求这种对称性;一个好的实现将让你使用相同的方法来建立“广播”和“对话”。