php - 使用 Web 套接字向客户端发送消息

标签 php websocket

我正在使用 https://github.com/orchidsoftware/web-socket在我的 laravel 项目中,我想向连接的客户端发送消息。

到目前为止,我已经按照自述文件启动并运行了服务器 - 我收到了“已建立连接”的警报。

但是当我尝试向客户端发送消息时,没有任何反应。我创建了一个 sendMessageToAll 函数并尝试从 onOpen 和另一个 Controller 调用它:

public function onOpen(ConnectionInterface $conn)
{
    $this->clients->attach($conn);
    $this->sendMessageToAll("message");
}

public function sendMessageToAll($msg){
    foreach ($this->clients as $client) {
        $client->send($msg);
    }
}

从另一个 Controller :

public function test() {
    $ws = new WebSocketClass();
    $ws->sendMessageToAll("testing");
}

为了启动和运行它,我是否缺少某些东西?

最佳答案

来自另一个 Controller ?您无法访问在另一个线程(即您的服务器)中运行的进程(php 脚本)。套接字服务器是连接的客户端之间的集线器,等待消息,如果收到消息,则再次发送(如果被告知这样做)。换句话说 - 如果您想向所有连接的客户端发送消息,您必须成为其中之一。


您的初始代码看起来不错,服务器应该已启动并正在运行。所以,测试一下。

最简单的方法是打开一些到您的套接字服务器的 telnet 连接并开始消息传递。

public function onOpen(ConnectionInterface $conn)
{
    $this->clients->attach($conn);
    $msg = "Connection established!\n"
    echo $msg;                        // send server log to shell
    sendMessageToAll($msg);           // your initial function should be working
}

public function onMessage(ConnectionInterface $from, $msg) {
    echo "Message from: {$conn->resourceId} received!\n";  //log again
    sendMessageToAll($msg);
}

public function onError(ConnectionInterface $conn, \Exception $e) {
    echo "Error: {$e->getMessage()}\n";
    $conn->close();
}

此外,调试您的发送功能:

public function sendMessageToAll($msg){
    foreach ($this->clients as $client) {
        echo "Sending message to {$client->resourceId} \n";
        $client->send($msg);
    }
}

现在,打开一些到您的 socketserver 端口的 telnet 连接(在服务器控制台中注意到):

telnet 127.0.0.1 8080

并从其中之一发送消息。同样,您应该从服务器得到通知并收到每个 telnet 客户端的消息。

关于php - 使用 Web 套接字向客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52598290/

相关文章:

c# - .NET WebSocket 客户端和服务器库

django - 如何计算 django channel 组中有多少客户端

php - 上传文件过程中不会导致服务器端错误

javascript - Jquery 查找 Active 类并替换该类

php - 为什么 Mac 计算机上的简单 PHP Curl https POST 请求需要 30 秒以上才能完成?

haskell - Yesod 中的 Websocket?

PHP Regex 拆分 SQL 字段列表

PHP/JS 表单类 - 数组与 OO

node.js - 使用 ws 发送自定义事件

javascript - 为什么我在 Node 的 HTTP 服务器上收到这么多连接事件?