【问题标题】:send messege to client from ratchet web socket从棘轮 websocket 向客户端发送消息
【发布时间】:2018-05-26 09:40:28
【问题描述】:

我从这个 tuts https://www.sitepoint.com/how-to-quickly-build-a-chat-app-with-ratchet/ 创建了一个 Web 套接字服务器 现在我想知道如何向特定连接发送消息。这些是我的代码。在这些代码中向所有连接发送消息,但我想知道哪个连接向我发送消息,然后向该连接发送消息。

我的客户端 js

(function(){

var user;
var messages = [];

function updateMessages(msg){
    messages.push(msg);
}

var conn = new WebSocket('ws://127.0.0.1:4510');
conn.onopen = function(e) {
console.log("Connection established!");
conn.onmessage = function(e) {
    var msg = JSON.parse(e.data);
    alert(msg);
    updateMessages(msg);
};
conn.onclose = function () {
    // conn.close();
}; // disable onclose handler first
var i = 0;
$('#start').click(function(){
    user = $('#user').val();
    var msg = {
    "name" : 'start' 
};
updateMessages(msg);
conn.send(JSON.stringify(msg));
});
};
})();

和我的 php 服务器文件

    <? 
protected $clients;
public $i = 0;
public function __construct() {
    $this->clients = new \SplObjectStorage;
}

public function onOpen(ConnectionInterface $conn) {

    $this->clients->attach($conn);
    echo "New connection! ({$conn->resourceId})\n";

}

public function onMessage(ConnectionInterface $from, $msg) {

        foreach ($this->clients as $client) {
            if ($from !== $client) {

                $client->send($rsid);
            }
        }

}

public function onClose(ConnectionInterface $conn) {

    $this->clients->detach($conn);

    echo "Connection {$conn->resourceId} has disconnected\n";
}

public function onError(ConnectionInterface $conn, \Exception $e) {
    echo "An error has occurred: {$e->getMessage()}\n";

    $conn->close();
}

【问题讨论】:

  • 您的问题解决了吗?

标签: php websocket ratchet


【解决方案1】:

我几天前也有类似的问题,我终于找到了一个很好的方法来处理所有的连接:

而不是做

var conn = new WebSocket('ws://127.0.0.1:4510');

我将 userId 作为 URL 查询传递:

var conn = new WebSocket('ws://127.0.0.1:4510/?id=123');

在服务器端,将 userId 和传入连接作为键值对存储在 PHP 数组中。当您想发送给特定用户时,只需索引该数组即可获得连接。

        $query = $conn->httpRequest->getUri()->getQuery();
        //get query from URL like ws://127.0.0.1:8080/?id=123456
        $query_list = explode("&", $query);
        $user_id = trim(substr($query_list[0], 3));
        $this->users[$user_id] = $conn;

如果您还想限制每个用户一个连接,并在同一用户在其他地方登录时通知旧连接,您可以在此处参考我的代码:

https://github.com/tli4/ratchet-practice

【讨论】:

  • 你能帮我解决这个问题吗
猜你喜欢
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
相关资源
最近更新 更多