我試圖在PHP和Node.JS創建的應用程序之間建立橋樑。通過UNIX套接字連接Node.JS和PHP - EPIPE寫入錯誤
的Node.js創建插座,聽着它,我的代碼:
var net = require('net'),
fs = require('fs');
var path = '/tmp/echo.sock';
fs.unlink(path, function() {
var server = net.createServer(function(c) {
console.log('server connected');
c.on('close', function() {
console.log('server disconnected');
});
c.write('hello\r\n');
c.on('data', function(data) {
console.log('Response: "' + data + '"');
c.write('You said "' + data + '"');
});
});
server.listen(path, function(e) {
console.log('server bound on %s', path);
});
});
process.on('uncaughtException', function (err) {
console.log("UNCAUGHT EXCEPTION ");
console.log("[Inside 'uncaughtException' event] " + err.stack || err.message);
});
而只是存在插座,發送一些數據連接我的PHP代碼:
$fp = fsockopen("unix:///tmp/echo.sock", -1, $errno, $errstr);
if (!$fp) {
return "ERROR: $errno - $errstr<br />\n";
} else {
fwrite($fp, "Hello World <3");
$out = fread($fp, 8192);
fclose($fp);
return $out; // That code is in function.
}
一切都應該工作,但在Node.JS控制檯中,我看到了響應:
server bound on /tmp/echo.sock
server connected
Response: "Hello World <3"
UNCAUGHT EXCEPTION
[Inside 'uncaughtException' event] Error: write EPIPE
at exports._errnoException (util.js:745:11)
at Object.afterWrite (net.js:763:14)
server disconnected
而在PHP中,我只看到第一條消息hello
。爲什麼以及如何解決這個問題?
在PHP你靠近管道的連接從它具有receieved數據後(c.write('你好\ r \ n')在節點js中)。當你的php進程不再監聽時,節點js試圖寫入管道,那麼它會失敗。 –
所以,我只需要使用一次'c.write',對吧? – Siper
或者你可以讓php繼續讀管道,直到它接收到一個特定的命令,然後關閉管道 –