On Mac and on Raspi same error: EADDRINUSE: address already in use 0.0.0.0:9092
On Mac and on Raspi same error: EADDRINUSE: address already in use 0.0.0.0:9092
发生了什么:
我在本地机器上 运行ning kafka 和 zookeeper 以及 docker-compose.yml。使用 server.js 我总是能够 运行 一个节点 websocket 服务器来传输消息。
我还通过 ssh 连接到 raspi 4。 raspi 和我的机器在同一个网络中,还有 运行s kafka 和 zookeeper。
如果我 运行 server.js,我现在会以某种方式收到一条错误消息(如下所示)。我在 raspi 和我的 macbook 上都尝试了 运行ning 脚本,我总是收到相同的消息。
我尝试了以下方法
我搜索了使用该端口的其他进程,但只找到了使用它的 docker 容器。
(基础) ➜ 服务器 git:(branch_julian) ✗ lsof -i:9092
命令 PID 用户 FD 类型设备 SIZE/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
代码中,您试图在 Kafka 已经分配的端口 9092 上创建一个 WebSocket 服务器。
你最好check npm documentation or github documentation。您可以将您的 Kafka 配置到另一个端口并相应地配置您的 SimpleConsumer(使用 connectionString
)。
发生了什么:
我在本地机器上 运行ning kafka 和 zookeeper 以及 docker-compose.yml。使用 server.js 我总是能够 运行 一个节点 websocket 服务器来传输消息。
我还通过 ssh 连接到 raspi 4。 raspi 和我的机器在同一个网络中,还有 运行s kafka 和 zookeeper。
如果我 运行 server.js,我现在会以某种方式收到一条错误消息(如下所示)。我在 raspi 和我的 macbook 上都尝试了 运行ning 脚本,我总是收到相同的消息。
我尝试了以下方法
我搜索了使用该端口的其他进程,但只找到了使用它的 docker 容器。
(基础) ➜ 服务器 git:(branch_julian) ✗ lsof -i:9092 命令 PID 用户 FD 类型设备 SIZE/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
代码中,您试图在 Kafka 已经分配的端口 9092 上创建一个 WebSocket 服务器。
你最好check npm documentation or github documentation。您可以将您的 Kafka 配置到另一个端口并相应地配置您的 SimpleConsumer(使用 connectionString
)。