应用程序中的Questios如skype

时间:2017-04-14 20:51:50

标签: sockets elixir phoenix-framework

朋友我打算像Skype一样规划一个应用程序。我很少关心一个插座连接上的多个房间。

假设我有200个在线朋友。在凤凰插座中,当一个人加入房间时,他将能够发送并接收所有消息(由同一房间内的其他用户发送)

我的问题出在这个scnaioro。

  • 我和我的朋友“A”聊天

  • “我自己”和“A”都加入了一个房间“1”,我们都成功发送和接收消息。

  • 我的另一个朋友“B”给我发了一条消息,我还没有加入房间:2。我不会收到“B”的提醒和通知。

  • 我的问题是我应该怎么做。我应该根据我的在线朋友列表同时加入多个房间吗?在这种情况下,很多房间将由我和其他朋友加入。是否有任何性能问题。因为我的在线朋友数量可能超过200到400.当任何朋友上线或离线时,我也需要自己加入并不断离开房间。

  • 另一种情况是,我应该只保留一个名为chat的房间。我应该编写一个包含我逻辑的SubChaneel模块。每个消息将与子通道参数一起广播。我的javascript和ui将控制哪个消息属于哪个用户(朋友)的房间。活动聊天(朋友)将被追加并且不活跃(在线)用户也将附加在他们隐藏的UI元素中。

1 个答案:

答案 0 :(得分:0)

我回答了非常相似的问题How to keep a user subscribed to every chatPhoenix Channels - Multiple channels per socket。总之,我会为每个打开的聊天会话提供一个用户频道和一个房间/频道。使用聊天频道广播消息和用户频道,以便为跟踪当前订阅的UI部分推送每个频道的更新。

在我的聊天应用中,如果有人@mentions某人没有在该房间订阅,我会自动为该人创建订阅并将其添加到用户界面的订阅列表中。

如果用户没有打开聊天会话,我不会推送房间的消息。但是,我会通过用户频道推送警报(针对@at提及和直接消息)和未读消息通知。

我的应用程序有一个聊天窗口布局(类似于Slack)。现在,如果有人在几个窗口之间切换,我每次都会重新加载消息。但是,每次加载房间需要几秒钟。我要修改我的设计,以便当用户更换房间时,我将旧房间保存在客户端中。这样我就可以在客户端重新加载房间而无需返回服务器。但是,我需要打开多个房间频道并处理未对活动聊天开放的房间的传入消息。