1

我正在尝试使用 node.js、express 和 socket.io 构建一个小型应用程序,其中涉及处理基本的社会关系。有多个用户,您可以请求与他们成为朋友,接受这些请求,拒绝他们,以及与用户解除好友关系——基本上,很像 Facebook。如果用户 A 已登录,并且用户 B 请求与他建立友谊,我希望用户 A 立即被告知好友请求。这就是 websockets(和混乱)进来的地方。

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

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

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

4

2 回答 2

1

如果您阅读“发布/订阅模式”(“pubsub”),所有这些(包括前面的答案)对您来说会变得更加清晰。这种模式的基本方面是:

1)你有“人”(“谈话者”),他们每个人都有“有话要说”,可能会引起其他人的兴趣。

2)你有“人”(“听众”)每个人都“想听”其他一些“人”(尽管很少有人听;他们中的大多数人都很挑剔他们听谁,如果只是为了不被不堪重负)。

发布/订阅模式描述了如何将谈话者与听众“联系起来”,这样谈话者就不必担心跟踪他们的听众是谁,听众也不必担心跟踪哪些谈话者他们决定倾听(即他们不必“听到”每个人的谈话并试图将骚动过滤到他们感兴趣的地方)。

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

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

于 2012-07-27T08:01:08.720 回答
1

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

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

因为数据被保存在服务器端,即使用户在客户端关闭了套接字,数据也已经被传递给一个变量并保存在服务器端。


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

于 2012-07-27T04:18:28.433 回答