La sugerencia parece ser hablar con el nodo a través de la interfaz HTTP, al igual que cualquier otro cliente. Usted puede hablar con el nodo a través de HTTP usando cURL en PHP
me enfrentaba a un problema similar con el deseo de mantener informados a los usuarios de un nueva nota agregada a un error, y notificaciones similares que realmente podrían realmente ser enviadas efectivamente desde PHP a mi servidor Node. Lo que hice a continuación (disculpas si esto se distorsiona y no está formateado en enviando, si lo hace, estaría feliz de pegar el código en otro lugar): Primero, necesitarás usar cURL de PHP. Escribí una función para mi clase así:
function notifyNode($type, $project_id, $from_user, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_PORT, 8001);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_POST, true);
$pf = array('f' => $type, 'pid' => $project_id, 'user_from' => $from_user,
'data' => array());
foreach($data as $k => $v) {
$pf['data'][$k] = $v;
}
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($pf));
curl_exec($ch);
curl_close($ch);
}
Se dará cuenta de que puedo enviar la solicitud cURL en el mismo servidor desde tanto PHP y NodeJS está ejecutando allí, su experiencia puede variar. El puerto donde configuré este código para conectarme es 8001 (este es el puerto en el que se ejecuta mi servidor Node y el puerto al que se conecta el servidor socket.io). Este envía una solicitud HTTP POST con el campo de publicación codificado. Esto es todo bastante cURL estándar.
En su aplicación Nodo es probable que tenga algo como:
var server = http.createServer(function(req, res) {});
server.listen(8001);
var io = io.listen(server, { transports: ['websocket', 'flashsocket', 'xhr-polling'] });
...
bien lo que vamos a hacer aquí es ampliar en la parte http.createServer, a escuchar las conexiones que vienen de nuestro host local ("127,0 .0.1 "). El código createServer entonces es:
var server = http.createServer(function(req, res) {
// Check for notices from PHP
if(res.socket.remoteAddress == '127.0.0.1') {
if(req.method == 'POST') {
// The server is trying to send us an activity message
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
res.writeHead(200, [[ "Content-Type", "text/plain"]
, ["Content-Length", 0]
]);
res.write('');
res.end();
//sys.puts(sys.inspect({fields: fields}, true, 4));
handleServerNotice(fields);
});
}
}
});
Desde allí se puede poner en práctica su función handleServerNotice ..
function handleServerNotice(data) {
...
}
, etc, etc no he probado esto en un tiempo, y en el hecho de que el bloque de código se comentó en mi servidor de nodo, así que espero que lo que he pegado aquí funcione - en general este concepto está probado y creo que funcionará para usted . De todas formas, solo quería asegurarme de que sabían que habían pasado unos meses, así que No estoy seguro de por qué lo comenté. El código que escribí tomó una pequeña investigación de , como configurar el encabezado 'Expect:' en cURL, y I estaba muy emocionado cuando finalmente funcionó. Avíseme si necesita alguna ayuda adicional de .
mejor,
Matt Pardee
¡Buen enlace! Muchas gracias por su ayuda. – Sparky1
Si bien esto puede responder teóricamente a la pregunta, nos gustaría que incluya las partes esenciales del artículo vinculado en su respuesta, y proporcione el [enlace de referencia] (http://meta.stackexchange.com/q/8259). Si no se hace eso, la respuesta corre peligro a causa de la podredumbre del enlace. – Kev
de acuerdo. La información importante ahora reside en la respuesta. No más riesgo de putrefacción. –