如何防止超过 2 个 tokbox 客户端?
How to prevent more than 2 tokbox clients?
我有以下代码:
openTokInit() {
this.session = OT.initSession(this.tokboxApiKey, this.sessionId);
const self = this;
this.session.on('connectionCreated', function(event) {
self.connectionCount++;
});
if (this.connectionCount < 2) {
this.session.connect(this.token, err => {
if (err) {
reject(err);
} else {
resolve(this.session);
}
});
}
问题在于,当 if 语句运行时,connectionCount 始终为 0,因为 'connectionCreated' 事件会在几秒后触发。我不清楚如何在连接新会话之前适当地等待所有 connectionCreated 事件触发。
来自 OpenTok 团队的 Adam。
您只有在连接后才能获得 "connectionCreated" 事件。因此,如果您已经连接并且您是第 3 个(或更多)参与者,则需要断开连接。我会使用 connection.creationTime 查看谁先到达那里,以避免 2 个人同时连接并且他们都断开连接。这样的事情应该可以解决问题:
session = OT.initSession(apiKey, sessionId);
let connectionsBeforeUs = 0;
session.on('connectionCreated', (event) => {
if (event.connection.connectionId !== session.connection.connectionId &&
event.connection.creationTime < session.connection.creationTime) {
// There is a new connection and they got here before us
connectionsBeforeUs += 1;
if (connectionsBeforeUs >= 2) {
// We should leave there are 2 or more people already here before us
alert('disconnecting this room is already full');
session.disconnect();
}
}
});
session.connect(token);
Here is a jsbin that demonstrates it working.
我不确定你的整个应用程序是如何工作的,但另一种选择可能是在服务器端执行此操作,并且只分发 2 个令牌供人们连接。因此,当他们试图获得第三个令牌时,您会在那时阻止他们。而不是让他们连接到会话然后断开连接。这种方法的优点是您可以更快地注意到并更快地向用户提供反馈。此外,恶意用户不能随便破解 javascript 并进行连接。您还可以使用 session monitoring API 来跟踪从您的服务器连接的用户。
另一个选择是使用 forceDisconnect() 功能将房间中已经有 2 个人的人踢出房间。因此,踢出第三个参与者是已经在房间里的人的责任,而不是第三个参与者注意到那里已经有人并离开了自己。这意味着恶意人员无法破解其浏览器中的 JavaScript 代码并加入其他人的房间。
在不了解您的整个应用程序的情况下,虽然很难知道什么是最适合您的选择。
希望对您有所帮助!
我有以下代码:
openTokInit() {
this.session = OT.initSession(this.tokboxApiKey, this.sessionId);
const self = this;
this.session.on('connectionCreated', function(event) {
self.connectionCount++;
});
if (this.connectionCount < 2) {
this.session.connect(this.token, err => {
if (err) {
reject(err);
} else {
resolve(this.session);
}
});
}
问题在于,当 if 语句运行时,connectionCount 始终为 0,因为 'connectionCreated' 事件会在几秒后触发。我不清楚如何在连接新会话之前适当地等待所有 connectionCreated 事件触发。
来自 OpenTok 团队的 Adam。
您只有在连接后才能获得 "connectionCreated" 事件。因此,如果您已经连接并且您是第 3 个(或更多)参与者,则需要断开连接。我会使用 connection.creationTime 查看谁先到达那里,以避免 2 个人同时连接并且他们都断开连接。这样的事情应该可以解决问题:
session = OT.initSession(apiKey, sessionId);
let connectionsBeforeUs = 0;
session.on('connectionCreated', (event) => {
if (event.connection.connectionId !== session.connection.connectionId &&
event.connection.creationTime < session.connection.creationTime) {
// There is a new connection and they got here before us
connectionsBeforeUs += 1;
if (connectionsBeforeUs >= 2) {
// We should leave there are 2 or more people already here before us
alert('disconnecting this room is already full');
session.disconnect();
}
}
});
session.connect(token);
Here is a jsbin that demonstrates it working.
我不确定你的整个应用程序是如何工作的,但另一种选择可能是在服务器端执行此操作,并且只分发 2 个令牌供人们连接。因此,当他们试图获得第三个令牌时,您会在那时阻止他们。而不是让他们连接到会话然后断开连接。这种方法的优点是您可以更快地注意到并更快地向用户提供反馈。此外,恶意用户不能随便破解 javascript 并进行连接。您还可以使用 session monitoring API 来跟踪从您的服务器连接的用户。
另一个选择是使用 forceDisconnect() 功能将房间中已经有 2 个人的人踢出房间。因此,踢出第三个参与者是已经在房间里的人的责任,而不是第三个参与者注意到那里已经有人并离开了自己。这意味着恶意人员无法破解其浏览器中的 JavaScript 代码并加入其他人的房间。
在不了解您的整个应用程序的情况下,虽然很难知道什么是最适合您的选择。
希望对您有所帮助!