Skip to content
This repository has been archived by the owner on Sep 25, 2023. It is now read-only.

WIN环境下,执行pomelo add/restart等操作都会报错 是什么问题呢??? #994

Open
zhongG opened this issue Mar 27, 2018 · 5 comments

Comments

@zhongG
Copy link

zhongG commented Mar 27, 2018

我在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. (internalild_process.js:323:11)\n at emitOne (events.js:90:13)\n at Socket.emit (events.js:182:7)' }

但是我查看过端口我读是用的没有使用过的。

有碰到这种情况的老铁么??

@whtiehack
Copy link
Contributor

因为 只支持 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 ';

@flamefox
Copy link

flamefox commented Mar 27, 2018

修改一下这个
var cmd = os.type() === 'Windows_NT' ? `netstat -ano | %windir%\\system32\\find.exe "${p}"` : `netstat -tln | grep ${p}`;

我也不知道项目组的人是懒还是怎么的,反正没人管了

@whtiehack
Copy link
Contributor

我在用 @node-pinus

@npcode
Copy link

npcode commented Jul 20, 2019

这个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" });
  });
};

@Alisheng
Copy link

修改一下这个
var cmd = os.type() === 'Windows_NT' ? `netstat -ano | %windir%\\system32\\find.exe "${p}"` : `netstat -tln | grep ${p}`;

我也不知道项目组的人是懒还是怎么的,反正没人管了

find 老是报find:参数格式不正确,我该findstr就正常了

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants