Twilio ip消息传递,如何退订频道

ver*_*com 0 javascript instant-messaging javascript-events twilio

我已经使用Twilio IP消息传递示例作为起点编写了一个简单的聊天。这个想法是在各个客户和管理员之间建立私有渠道。每个客户将有一个单独的带有admin的专用频道。管理员可以选择打开/订阅与特定客户聊天的频道。

我现在面临的问题是我无法取消订阅以前订阅的频道。

这是以管理员,客户端(test1)和客户端(test2)登录的链接:http : //test.verbery.com/

重现此问题的步骤:

  1. 单击“管理员(admin1)”以管理员身份登录
  2. 在新打开的管理员聊天页面上,单击左侧面板上的“ test1@qwe.com”频道以订阅频道并接收该频道的消息。
  3. 在主页上单击“客户端(test1)”以客户端身份登录,并以客户端身份加入频道test1@qwe.com。
  4. 从管理员向客户端(test1)发送消息,从客户端(test1)向管理员发送消息。
  5. 在管理员聊天中,单击频道test2@qwe.com订阅此新频道并与另一个客户端(test2)聊天;以客户端(test2)身份登录并与管理员聊天。
  6. 现在的问题是:您仍在从test1@qwe.com接收消息-尝试以test1@qwe.com客户端发送消息。订阅test2@qwe.com频道时,您尚未退订test1@qwe.com

技术细节:要订阅频道,我使用了事件“ onMessageAdded”来监听该频道的传入消息:

// Listen for new messages sent to the channel
personalChannel.on('messageAdded', function(message) {
    printMessage(message.author, message.body);
});
Run Code Online (Sandbox Code Playgroud)

要取消订阅我尝试过的消息unbind('onMessageAdded')off('onMessageAdded')但是它不起作用,js控制台说:取消绑定(或关闭)不是功能。

有什么想法如何退订频道吗?

预先感谢,德米特里

phi*_*ash 9

Twilio 开发人员布道者在这里。

Bob Sponge 是对的,您需要调用leave() 频道才能正确离开它。

personalChannel.leave();
Run Code Online (Sandbox Code Playgroud)

如果您希望与频道保持连接,但停止侦听传入事件,则可以取消绑定侦听器。你实际上会使用removeListener而不是offor来做到这一点unbind。这遵循Node.js EventEmitter API

personalChannel.removeListener("messageAdded");
Run Code Online (Sandbox Code Playgroud)

让我知道这是否有帮助。


小智 7

如果您不想离开或取消订阅频道,可以执行以下操作删除频道中的所有事件:

activeChannel.removeAllListeners();
Run Code Online (Sandbox Code Playgroud)

当我在频道之间切换时,我会这样做。