PHP Ratchet Web 套接字发送消息工作流

标签 php sockets websocket ratchet

我正在通过 PHP Ratchet 库开发聊天服务器,我对发送消息有疑问:

我有两种方法:onOpen(ConnectionInterface $conn)onError(ConnectionInterface $conn, \Exception $e) .

当客户端连接到聊天时调用 onOpen 方法并且我会发送响应消息,因此我这样做 $conn->send($data) .

如果有错误 onError被调用,但如果没有错误我怎么知道自从流程继续以来一切是否成功? (我没有成功的方法)。

我问你以下问题,因为我必须管理以下情况:
当我将消息发送给客户端时,如果“发送”方法出错,我必须将无法发送的消息保存在数据库中,然后尝试推迟发送,而如果发送成功,则不必保存任何事物。我的问题是,如果“send”方法出错,则会调用“onError”方法,并且我只有关于“ConnectionInterface”的实例,但没有我无法发送的消息,那么此时我该怎么办?做恢复吗?

我希望我能清楚地解释问题

最佳答案

也许,有些像这样...

@例子:

// ...

/**
 * {@inheritDoc}
 */
public function onOpen(ConnectionInterface $connection)
{
    // ...

    $package = [
        'data'  => $data = [] // for example
    ];

    $json = json_encode($package, JSON_FORCE_OBJECT);

    $connection->currentMessage = $json;
    $connection->send($json);

    // $connection->send(null); // uncomment if you wanna simulate error (call onError())
}

// ...

/**
 * {@inheritDoc}
 */
public function onError(ConnectionInterface $connection, \Exception $e)
{
    $connection->currentMessage; <-- your current message

    // ... save message, etc, ...whatever you want :)

    $connection->close();
}

玩得开心!

关于PHP Ratchet Web 套接字发送消息工作流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54476469/

相关文章:

php - 试图编辑一个 php 文件以将其内容放在一个 div 中

c# - 当 TCP 没有在一次读取中获得所有字节时,你如何解释

c++ - 发送套接字结果 0x000000be

ruby-on-rails - Nginx可以用作后端Websocket服务器的反向代理吗?

php - 当父行链接到子行时

php - 如果用户闲置 10 分钟,则使 Zend session 过期

php - 如何使用phpredis在PHP中删除具有相同模式的多个redis键?

java - Java 8 中的新 java.security.AccessControlException

javascript - 将 AudioBuffer 转换为 ArrayBuffer

javascript - WebSocket Javascript 客户端未从服务器接收消息