He estado jugando con PHP Streams y he estado experimentando al comenzar a escribir la clase que se muestra aquí. Los documentos PHP son escasos en esta área, por decir lo menos.Notificación de flujo de PHP Retrollamada no invocada
Me está resultando difícil obtener el contexto de mi secuencia para invocar el método de devolución de llamada especificado. Si utilizo una función como file_get_contents
o fopen
para conectarme a un socket, se invoca la devolución de llamada, pero si uso stream_socket_client
, no.
Supongo que debería hacerlo porque estoy pasando el contexto a stream_socket_client
y si uso stream_socket_recvfrom
obtengo la misma cadena del socket ya que los fgets volverían.
Los documentos relevantes de PHP están vinculados al final de la publicación.
class IMAP {
// Connection Parameters
private $host;
private $port;
private $timeout;
// Credentials
private $email;
private $password;
private $client;
private $transcript;
function __construct($connection, $credentials) {
// Set Connection Settings
$this->host = $connection['host'];
$this->port = $connection['port'];
$this->timeout = $connection['timeout'];
// Set Credentials
$this->email = $credentials['email'];
$this->password = $credentials['password'];
// Connect to the IMAP server
$params = array('notification'=>array($this, 'getLine'));
$ctx = stream_context_create();
stream_context_set_params($ctx, $params);
$this->client = stream_socket_client("tcp://$this->host:$this->port",$errno, $errstr, $this->timeout, STREAM_CLIENT_CONNECT, $ctx);
stream_socket_sendto($this->client, "a001 NOOP\r\n");
}
function getLine($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
$args = func_get_args();
var_dump($args);
}
}
$connection = array(
'host' => 'somehost',
'port' => 143,
'timeout' => 10
);
$credentails = array(
'email' => 'someemail',
'password' => 'somepassword'
);
$imap = new IMAP($connection, $credentails);
?>
http://us3.php.net/manual/en/function.stream-context-set-params.php http://us3.php.net/manual/en/context.params.php
Me encontraron esta de alguna manera relacionado informe de error PHP también, pero parece que el informe era inútil:
http://bugs.php.net/bug.php?id=42387&edit=1
Gracias por la información. ¿Crees que tendría sentido que stream_socket_client() active la devolución de llamada? Tal vez presente un informe de error. – macinjosh
No sé lo suficiente sobre los notificadores para darle una respuesta definitiva. Tal vez están destinados (por alguna razón) solo para las envolturas de protocolo. Pero al menos php_stream_notify_info y php_stream_notify_error serían agradables. – VolkerK