2016-04-07 36 views
1

我只是在學習Ratchet(庫中用於PHP中的實時聊天應用程序)。按照該文件,下面的功能將得到兩件事情:Rachet中的實時一對一消息

  1. 從誰的消息來了,
  2. 消息。

但是,它錯過了誰發送。該功能將消息發送給所有連接的人。但是我想實現一對一的聊天。有沒有辦法做到這一點?

以下是該圖書館的鏈接:http://socketo.me/docs/hello-world

public function onMessage(ConnectionInterface $from, $msg) { 
    //send the message to all the other clients except the one who sent. 
    foreach ($this->clients as $client) { 
     if ($from !== $client) { 
      $client->send($msg); 
     } 
    } 
} 
+0

它是不是已經有空間來限制一對一的消息? dunno以前從未使用過它。 – Chay22

+0

你可以試試https://github.com/php-pure/sacky-server – daison12006013

回答

1

我建議你爲用戶想要的每個聊天做不同的訂閱。每個人之間的聊天消息

一個通道:subscriptionname = room123

和每個人交談,你可以使用不同的簽名:subscriptionname = personal456。

然後讓您的客戶端應用程序監聽2個不同的訂閱,並嘗試根據收到該郵件的訂閱的名稱進行路由。

0

是的,你可以做一對一的信息。但是,這些仍然需要通過套接字服務器 - 您不能在瀏覽器之間進行直接的點對點消息傳遞。每個用戶都有一個永久開放的連接,但僅限於服務器。

您需要做的是按照每個客戶端連接存儲用戶名,以便遍歷$this->clients時,可以檢索連接或用戶名。然後,您可以將此列表廣播給所有訂閱者,這取決於您設計所需的任何隱私約束。

最後,每個用戶則可以發送私人消息,通過指定:

  • 消息文本
  • 誰,誰才能解決

這將棘輪接收的用戶名,並從那裏您可以使用用戶名在$this->clients中進行連接查找。如果連接仍處於打開狀態,則連接將用於轉發消息。

您可以選擇發送一個「確認」(確認)給原始發件人,說他們的消息是(或沒有)發送。