在Mac和Raspi上同样的错误:EADDRINUSE:地址已经在使用0.0.0.0:9092 &g



发生了什么:

我使用docker-compose运行kafka和zookeeper。在我的本地机器上。使用server.js,我总是能够运行一个节点websocket服务器来传输消息。

我还通过ssh连接到raspi 4。raspi和我的机器在同一个网络中,也运行kafka和zookeeper。

如果我运行server.js,不知何故我现在得到一个错误消息(如下所示)。我试着在raspi和macbook上运行这个脚本,我总是得到同样的信息。

我尝试了以下

  • 我搜索了使用这个端口的其他进程,我只找到了使用它的docker容器。

    (base)呼吁server git:(branch_julian)·lsof -i:9092命令pid user fd type设备大小/off节点名称com。docke 7145 jumue 74u IPv6 0x4d78cd0e1c9333df 0t0 TCP *:XmlIpcRegSvc (LISTEN)

  • 我已经重新启动docker.

  • 关闭与pi的ssh连接

运行脚本docker-compose.yml:

version: "3"
services:
zookeeper:
image: 'bitnami/zookeeper:latest'
container_name: 'zookeeper'
ports:
- '2181:2181'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: 'bitnami/kafka:latest'
container_name: 'kafka'
ports:
- '9092:9092'
environment:
- KAFKA_BROKER_ID=1
- KAFKA_LISTENERS=PLAINTEXT://:9092
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
depends_on:
- zookeeper

server.js

const WebSocket = require("ws");
var Kafka = require('no-kafka');
const wss = new WebSocket.Server({ port: "9092" });
wss.on("connection", ws => {
console.log("Kafka is connected");
// Create an instance of the Kafka consumer
const consumer = new Kafka.SimpleConsumer;
var data = function (messageSet, topic, partition) {
messageSet.forEach(function (m) {
console.log(topic, partition, m.offset, m.message.value.toString('utf8'));
ws.send(m.message.value.toString('utf8'))
});
};
ws.on("close", () => {
console.log("Client has disconnected");
});
// Subscribe to the Kafka topic
return consumer.init().then(function () {
return consumer.subscribe('test', data);
});
});

错误消息
(base) ➜  websocketserver git:(branch_me) ✗ node server/server.js         
events.js:292
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use 0.0.0.0:9092
at Server.setupListenHandle [as _listen2] (net.js:1314:16)
at listenInCluster (net.js:1362:12)
at doListen (net.js:1499:7)
at processTicksAndRejections (internal/process/task_queues.js:85:21)
Emitted 'error' event on WebSocketServer instance at:
at Server.WebSocketServer._onServerError (/Users/jumue/virtual7/tasks/0006_lui_dashboard/websocketserver/server/node_modules/ws/lib/WebSocketServer.js:82:50)
at Server.emit (events.js:315:20)
at emitErrorNT (net.js:1341:8)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '0.0.0.0',
port: 9092
}

在你的server.js代码中,你试图在端口9092上创建一个WebSocket服务器,这个端口已经被Kafka分配了。

你最好检查npm文档或github文档。你可以将你的Kafka配置到另一个端口,并相应地配置你的SimpleConsumer(使用connectionString)。

最新更新