2016-01-23 72 views
3

語境:處理PubNub通道組限制

我們正在使用PubNub實時通信聊天應用工作。

PubNub允許在單個通道組中包含2000個通道,之後您可以通過連接最多訂閱10個組。

我們現在面臨的問題是我們的後端排序需要訂閱每個現有的渠道(通過組),因爲我們有一個Bot可以響應命令。

我們將通道一組channel_group_add_channel增加超過2000個頻道時PubNub不出錯時如何處理在node.js的這種連接,但是,而是返回一個200響應,只是拿出一個以前的通道(不知道哪一個)。

因此,我需要檢查一個組中當前的通道數量是多少,如果它滿了 - 開始一個新的組。

問題:

我們可以得到多個同時用戶註冊,這意味着新的渠道補充說,我們的機器人需要訂閱。

僞代碼來檢查我們是否可以添加更多的渠道到當前組。

addChannel(channel) { 
    group.canAdd() 
     .then(group.add(channel)); 
} 

canAdd將使用channel_group_list_channels檢查了多少個通道組中目前。因爲JavaScript的異步性,我們有一個競爭條件:

  • 目前集團擁有1999年渠道
  • 呼叫addChannel兩次
  • 兩個呼叫channel_group_list_channels可能回到1999年渠道
  • 我們添加的第一通道(組現在2000)
  • 我們添加第二個頻道,因爲我們認爲我們可以
  • 某些頻道被推出組(壞)。

有沒有一種方法可以在不降低性能的情況下解決這個問題?

請注意,即使在類似Redis的計數器中也會有同樣的問題,因爲問題是併發性的。

+0

這是一個高級的用例(扇入),你應該聯繫[PubNub支持] (http://www.pubnub.com/support)與解決方案架構師聯繫。而且我們有一個更強大的方法 - [PubNub BLOCKS功能即將推出](https://www.pubnub.com/products/blocks/)爲您實現這一點,不需要您的服務器訂閱每一個頻道。 –

+0

順便說一句,策略(高級版本)將實例化多個PUBNUB實例,每個實例可以訂閱10個通道組,每個通道組中有2000個通道。但是,PubNub渠道組不會奇蹟般地使您的服務器上的網絡,CPU和RAM限制消失。您仍然必須考慮您的服務器在窒息之前可以一次消耗多少消息,或者無法跟上。這就是PubNub全球數據流網絡必須爲1000多位客戶(數十億客戶,跨越多個數據中心的數百億交易)所做的事情 - 待續... –

+0

因此,解決方案是一項分佈式計算挑戰,想做,但我們可以幫助你。而PubNub Blocks會使這不必要。請聯繫我們,我們會做到這一點! –

回答

0

創建聊天機器人使用PubNub功能

真正的問題是關於訂閱數以千計的通道服務器,但功能上被提了出來這促使提問者提利用聊天機器人的解決方案。對於這個問題

盼望已久的答案... PubNub Functions已經存在了一年多了,建設一個聊天機器人很簡單,當你能夠領略到任何聊天機器人服務:IBM WatsonGupshupso many others out there

PubNub功能允許您點擊消息並修改消息,對消息進行編碼,拒絕消息,重定向,無論您需要做什麼,都可以通過PubNub網絡傳輸消息,而無需點擊服務器( S)。您只需在功能模塊中實施一些代碼,該代碼將根據不同的消息事件在PubNub網絡中執行:發佈,在線狀態,甚至可以設置endpoints

更多的資源創建聊天機器人: