我开发PHP支持瑞奇库聊天服务器,我有一个关于发送消息的疑问:
我有两种方法:find /opt/src/ -path "*/trunk/build.xml" -execdir svn update $(dirname {}) \; -exec ant -f {} \;
和onOpen(ConnectionInterface $conn)
。
当客户端连接到聊天时,将调用onOpen方法,并且我将发送响应消息,因此我会onError(ConnectionInterface $conn, \Exception $e)
。
如果有错误,将调用$conn->send($data)
,但如果没有错误,我将如何知道是否由于流程继续而一切都成功了? (我没有成功的方法)。
我问您以下问题,因为我必须处理以下情况: 当我将消息发送给客户端时,如果“发送”方法出错,我必须将无法发送的消息保存在数据库中,然后尝试将其推迟,而如果发送成功,则不必保存任何东西。我的问题是,如果“发送”方法出错,则将调用“ onError”方法,而我只有关于“ ConnectionInterface”的实例,而没有我无法发送的消息,那么在那时候我该怎么办?要恢复吗?
我希望是说明问题明确
答案 0 :(得分:0)
也许,像这样...
@示例:
// ...
/**
* {@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();
}
玩得开心!