pomelo
pomelo copied to clipboard
WIN环境下,执行pomelo add/restart等操作都会报错 是什么问题呢???
我在mac和linux服务器上 pomelo init 一个新的工程之后跑起来。操作pomelo add 去添加一个connector服务器 ,此时会提示 Successfully add server。查看列表之后添加成功。
换win环境下 同样的POMELO 以及 Node版本条件下,执行同样的操作 pomelo add 报错【
{ message: 'Port occupied already, check your server to add.',
stack: 'Error: Port occupied already, check your server to add.\n at H:\win\TestPomeloDemo\game-server\node_modules\pomelo\lib\modules\console.js:360:32\n at Object.utils.invokeCallback (H:\win\TestPomeloDemo\game-server\node_modules\pomelo\lib\util\utils.js:21:14)\n at H:\win\TestPomeloDemo\game-server\node_modules\pomelo\lib\modules\console.js:300:13\n at ChildProcess.exithandler (child_process.js:209:5)\n at emitTwo (events.js:100:13)\n at ChildProcess.emit (events.js:185:7)\n at maybeClose (internalild_process.js:850:16)\n at Socket.
但是我查看过端口我读是用的没有使用过的。
有碰到这种情况的老铁么??
因为 只支持 linux环境。
let checkPort = function (server: ServerInfo, cb: MasterCallback) {
if (!server.port && !server.clientPort) {
utils.invokeCallback(cb, 'leisure');
return;
}
let p = server.port || server.clientPort;
let host = server.host;
let cmd = 'netstat -tln | grep ';
if (!utils.isLocal(host)) {
cmd = 'ssh ' + host + ' ' + cmd;
}
exec(cmd + p, function (err, stdout, stderr) {
if (stdout || stderr) {
utils.invokeCallback(cb, 'busy');
} else {
p = server.clientPort;
exec(cmd + p, function (err, stdout, stderr) {
if (stdout || stderr) {
utils.invokeCallback(cb, 'busy');
} else {
utils.invokeCallback(cb, 'leisure');
}
});
}
});
};
看这一行 let cmd = 'netstat -tln | grep ';
修改一下这个
var cmd = os.type() === 'Windows_NT' ? `netstat -ano | %windir%\\system32\\find.exe "${p}"` : `netstat -tln | grep ${p}`;
我也不知道项目组的人是懒还是怎么的,反正没人管了
我在用 @node-pinus
这个pomelo简直就是坑套着坑,这个问题可以暴力解决。 找到pomelo模块:/node_modules/pomelo/lib/modules/console.js 找到 runServer 方法:
var runServer = function(app, server, cb) {
checkPort(server, function(status) {
if(status === 'busy') {
utils.invokeCallback(cb, new Error('Port occupied already, check your server to add.'));
} else {
starter.run(app, server, function(err) {
if(err) {
utils.invokeCallback(cb, new Error(err), null);
return;
}
});
process.nextTick(function() {
utils.invokeCallback(cb, null, { status: "ok" });
});
}
});
};
checkPort在window下面有问题的,直接把checkPort去掉,check个屁啊罗里吧嗦的,暴力解决
var runServer = function(app, server, cb) {
starter.run(app, server, function(err) {
if(err) {
utils.invokeCallback(cb, new Error(err), null);
return;
}
});
process.nextTick(function() {
utils.invokeCallback(cb, null, { status: "ok" });
});
};
修改一下这个
var cmd = os.type() === 'Windows_NT' ? `netstat -ano | %windir%\\system32\\find.exe "${p}"` : `netstat -tln | grep ${p}`;
我也不知道项目组的人是懒还是怎么的,反正没人管了
find 老是报find:参数格式不正确,我该findstr就正常了