【发布时间】:2018-09-25 09:18:50
【问题描述】:
我已经搜索了很久很久。我通常熟悉 LAMP 堆栈,所以很抱歉 - 我正在学习 Node,因为我正在尝试构建一个聊天功能 - 类似于 Intercom/drift 的工作方式。
我一直认为 Socket.io 是解决此问题的好方法,但我遇到了一些麻烦。基本概述是这样的:
- 用户可以使用我的服务在他们的网站上启用实时聊天功能(他们每个人都有一个唯一的 API 密钥)
- 他们可以将聊天添加到任意数量的网页/域(通过脚本标签)
- 网站的任何单个最终用户与脚本标签的管理员(用于在页面上包含脚本的 API 密钥的所有者)之间的聊天应该是私密的
我遇到了这个问题。
我应该为每个 URL 创建动态命名空间,还是一个房间?
假设我在客户端创建了一个独特的动态房间,例如在https://stackoverflow.com/a/19150254/1173155中使用
// client side code
var dynamicRoomName = API_KEY + "_" + fullURL + "_" + expressSessionId;
var socket = io.connect();
socket.emit('create room', dynamicRoomName);
// server side code
io.sockets.on('connection', function(socket) {
socket.on('create room', function(room) {
socket.join(room);
});
});
除了最终用户之外,唯一应该能够看到此聊天的人是该 API 密钥的管理员,我不确定如何实施。
我意识到我可能需要某种数据库来跟踪聊天/房间等。有没有什么好的资源来学习如何实现这种东西?
非常感谢您的帮助!
只是稍微扩展一下,也许是为了我在解决这个问题时好。
- 可以有多个管理员(独特的 API)
- 管理员只负责他们自己的聊天 - 他们看不到任何不属于其 API 密钥的聊天
- 许多用户可以与一位管理员聊天(私下)
- 所有聊天都是一对一的
- 最终用户和管理员用户将因此使用不同的客户端
- 管理员可以与个人用户进行大量聊天
- 用户通常会与一位管理员进行一次聊天
- 管理员无法创建聊天(仅接收来电) - 但当然可以回复
【问题讨论】:
标签: javascript node.js express websocket socket.io