2016-05-26 85 views
2

我打算創建一個使用瑞奇和laravel即時消息服務(我發現了一個名爲棘齒項目,棘輪集成到laravel)棘輪與laravel

我的問題是。

  1. 如何在允許他啓動Web套接字連接之前驗證客戶端。
  2. 一個用戶可以是多個組的一部分,所以我想創建像Poll_grp_id這樣的通道,並獲取所有用戶組的列表,然後訂閱所有這些Poll_Grp_id通道。我不知道如何去這樣做

回答

1

要回答你的第一個問題:

public function onSubscribe(ConnectionInterface $conn, $topic, $userKey) { 
    //check if the userKey is correct for that user, ... 
} 

我用這個自己與APIKey,每一次用戶訂閱,他們送了$ USERKEY與它對象。

該對象僅包含用戶id,apiKey,...(無論你需要驗證用戶)

第二個問題:

//從socketo.me代碼來舉個例子

protected $subscribedTopics = array(); 

public function onSubscribe(ConnectionInterface $conn, $topic) { 
    $this->subscribedTopics[$topic->getId()] = $topic; 
} 

/** 
* @param string JSON'ified string we'll receive from ZeroMQ 
*/ 
public function onBlogEntry($entry) { 
    $entryData = json_decode($entry, true); 

    // If the lookup topic object isn't set there is no one to publish to 
    if (!array_key_exists($entryData['category'], $this->subscribedTopics)) { 
     return; 
    } 

    $topic = $this->subscribedTopics[$entryData['category']]; 

    // re-send the data to all the clients subscribed to that category 
    $topic->broadcast($entryData); 
} 

在此,你會改變onSubscribe($conn, $topic)onSubscribe($conn, $topicArray)

然後你會得到從陣列中的所有單獨的「通道」並將它們添加到$subscribedTopics

當您嘗試送東西給那些「渠道」 /「主題」,然後將其發送給所有連接的客戶端,在有特定通道的$topicArray

我希望這幫助。

+0

說我在另一個控制器上做了一些操作。我如何從實現MessageComponentInterface的類中調用方法來向客戶端發送字符串? –

+0

因爲你想從其他方法調用它,我建議你檢查一下socketo.me教程的pushserver部分。這讓您可以通過套接字從服務器代碼中推送數據。 – mitchken

+0

我剛試過你的建議。請看看我發佈的新問題,該消息沒有發送 –