我正在开发PHP Ratchet库的聊天服务器,我对发送消息有疑问:
我有两种方法:onOpen(ConnectionInterface $conn)
和onError(ConnectionInterface $conn, \Exception $e)
。
当客户端连接到聊天onOpen方法被调用,我会发送一个响应消息,因此我做$conn->send($data)
。
如果有错误调用onError
,但是如果没有错误我怎么知道一切都是否成功,因为流程仍在继续? (我没有成功的方法)。
我问你以下问题,因为我必须管理以下情况:当我将消息发送给客户端时,如果“发送”方法出错我必须在数据库中保存我无法发送的消息并尝试推迟稍后,如果发送成功,我不需要保存任何东西。我的问题是,如果“发送”方法出错,调用“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();
}
玩得开心!