Javascript Node.js:如何在单个端口上侦听通信和响应
我目前正在Node.js中为PHP构建远程调试客户端,允许远程调试的PHP库通过localhost上的端口9000发送消息,因此远程调试客户端可以侦听消息并在同一主机和端口上响应 因此,我制作了一个TCP服务器,它监听端口9000,并在解析数据后做出相应的响应:Javascript Node.js:如何在单个端口上侦听通信和响应,javascript,node.js,sockets,port,Javascript,Node.js,Sockets,Port,我目前正在Node.js中为PHP构建远程调试客户端,允许远程调试的PHP库通过localhost上的端口9000发送消息,因此远程调试客户端可以侦听消息并在同一主机和端口上响应 因此,我制作了一个TCP服务器,它监听端口9000,并在解析数据后做出相应的响应: var net = require('net'); var transactionID = 1234; var parseXMLString = require('xml2js').parseString; /** * Create
var net = require('net');
var transactionID = 1234;
var parseXMLString = require('xml2js').parseString;
/**
* Create a server to respond to the debugger engine.
*
* @param {Socket} connection
*/
var server = net.createServer(function(socket) { //'connection' listener
console.log('socket connected to server');
socket.on('end', function() {
console.log('socket disconnected to server');
});
/**
* When the debugger engine sends a message over port 9000,
* send a response.
*
* @param {Buffer} data
*/
socket.on('data', function(data) {
// Data comes through as a buffer, stringify it.
var dataStringified = data.toString(),
splitData = null,
xmlStatement = null,
dataLength = null;
// Data comes through as a string separated by a null byte, so split it up.
splitData = dataStringified.split('\u0000');
dataLength = splitData[0];
xmlStatement = splitData[1];
parseXMLString( xmlStatement, function( err, result ) {
if ( 'init' in result ) {
var command = 'run -i 1234';
socket.write( command );
}
});
});
// socket.pipe(socket);
});
/**
* Listen to port 9000 to create connections from the debugger engine to the server.
*/
server.listen(9000, function() { //'listening' listener
console.log('server listening on port 9000');
});
但是,套接字/端口未写入
我已经看到在其他服务器示例中使用了socket.pipe(socket)
。如果代码中的这一行没有注释,端口确实会被写入,但是,它会建立一个循环连接,从XDebug发送的任何消息都会被发送回自己
我遗漏了什么?请你再解释一下,谁在和谁说话?您的节点脚本将在端口9000上侦听,XDebug(来自另一台服务器?)将连接到此端口以调试消息?@TimothyHa当然!我编辑后提到XDebug在本地主机上的9000上讲话,我的脚本通过相同的主机和端口对它讲话。您看到服务器开始监听了吗?“服务器正在侦听端口9000'-是否在控制台中?netstat-an | grep9000是否向您显示了侦听器已启动?socket.write(命令)在我看来很好。我还会检查您是否在某些防火墙中阻止端口9000上的传出数据。是的,当我启动应用程序时,
服务器监听端口9000
,然后当我初始化调试器引擎时,连接到服务器的套接字。因此,您可能永远不会进入if条件('init'结果)。你能在那里添加一些console.log吗?