MQTT-over-Websockets Error: listen EADDRINUSE

MQTT-over-Websockets Error: listen EADDRINUSE

正在关注此文档 https://github.com/mcollina/mosca/wiki/MQTT-over-Websockets

我在我的本地主机中设置了代理

var settings = {
  http: {
    port: 1884,
    bundle: true,
    static: './'
  }
};

//here we start mosca
var server = new mosca.Server(settings);

但是当我运行

node broker

我遇到了这个丑陋的错误

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: listen EADDRINUSE
    at exports._errnoException (util.js:746:11)
    at Server._listen2 (net.js:1146:14)
    at listen (net.js:1172:10)
    at net.js:1270:9
    at dns.js:85:18
    at process._tickCallback (node.js:355:11)
    at Function.Module.runMain (module.js:503:11)
    at startup (node.js:129:16)
    at node.js:814:3

检查我是否有其他进程

ps -ax | grep node
5266 pts/2    R+     0:00 grep --colour=auto node
kill -9 5266
bash: kill: (5266) - No such process

你有什么问题吗?

更新

感谢@hardillb 和@ralight 我用

解决了这个问题
sudo lsof -i TCP:1883

如果有蚊子简单 运行

sudo service mosquitto stop

这显示了当前正在您的计算机上侦听的套接字:

sudo netstat -ltn

如果有东西在监听,您会期望看到类似下面的内容。

tcp        0      0 0.0.0.0:1884              0.0.0.0:*               LISTEN

如果LISTEN被替换为TIME_WAIT,那么mosca中可能存在错误,不允许它重用未超时的监听套接字。不过我认为这不太可能。

要查找使用端口的进程,可以使用lsof:

sudo lsof -i TCP:1884

这将给出类似于我通过 运行 sudo lsof -i TCP:22

获得的下面示例的输出
COMMAND   PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
sshd     3878  root    3u  IPv4     4505      0t0  TCP *:ssh (LISTEN)

持有套接字的可能不是节点进程

尝试 运行 sudo lsof -i :1884 看看它可能对我有什么影响。

您是否也尝试过将端口号更改为 1884 以外的其他端口号,看看是否可行。