2016-05-26 41 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

我刚试过你的建议。请看看我发布的新问题,该消息没有发送 –