sockets - Websocket 和社交关系

标签 sockets node.js express socket.io

我正在尝试使用node.js、express 和socket.io 构建一个小型应用程序,其中涉及处理基本的社交关系。有多个用户,你可以请求与他们成为好友,接受这些请求,拒绝他们,以及取消用户好友关系——基本上,很像 Facebook。如果用户 A 已登录,并且用户 B 请求与他建立友谊,我希望用户 A 立即收到有关好友请求的通知。这就是 websockets(和困惑)发挥作用的地方。

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

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

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

最佳答案

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

1) 你有“人”(“谈话者”),每个人都有“一些话要说”,而其他人可能会感兴趣。

2)你有“人”(“听众”),他们每个人都“想听”其他“人”的声音(尽管很少只是听任何人的声音;他们中的大多数人都对听谁的声音很挑剔,如果只是听的话)避免被淹没)。

发布/订阅模式描述了如何将讲话者与听众“连接”起来,使得讲话者不必承担跟踪听众是谁的负担,听众也不必承担跟踪听众的负担他们决定听哪些讲话者的讲话(即,他们不必“听到”每个人的讲话并尝试将喧闹过滤到他们感兴趣的内容)。

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

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

关于sockets - Websocket 和社交关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11681024/

相关文章:

构造和解析网络数据包

Python TCP 几个同时监听多个端口

c++ - 如何确定socket listen() backlog 参数的值?

node.js - mongodb 原生的 promise

javascript - GridFS通过_id查找文件并下载文件名

javascript - Express.js : capture generic routes with numeric Id

mysql - 通过socket与mysql交互

node.js - 无法安装 aerospike,在步骤 'node-gyp rebuild' 获取 aerospike 失败

node.js - 终止 Faye 客户端连接

json - 使用 Node 或 Express 返回 JSON 的正确方法