我有 2 个服务器,一个是 UI 服务器,另一个是 kafka 服务器。
我的 UI 服务器中的 javascript 文件正在从一个 csv 文件中获取数据,我正在逐行读取该文件并将其转换为 JSON。我需要将这些以 JSON 格式逐行读取的数据发送到我的 Kafka 生产者服务器。为进一步工作。两个服务器都有自己的专用 IP 地址。例如kafka服务器有192.168.2.12:9098
reportJSON 是我在 UI 服务器 js 文件中获取我的 csv 数据的变量。
当我尝试运行 ui 服务器的 js 文件时,它显示错误:
2018-05-09T15:18:56.147Z - error: uncaughtException: io.connect is not a function date=Wed May 09 2018 15:18:56 GMT+0000 (UTC)
JavaScript 文件中的 UI 连接:
var io = require('socket.io');
var socket = io.connect("http://192.168.2.12:9098");
socket.on('connect', function () {
console.log('Connection Established');
socket.emit('csvDataFromUI', function (reportJSON) {
console.log("Data inside the csvUpload Handler is = " + reportJSON);
});
});
kafka 生产者 javaScript 文件中的代码:
var http = require('http');
var app = express();
var host = process.env.HOST || config.host;
var port = process.env.PORT || config.port;
console.log("STARTING EVENT SERVER PRODUCER");
var server = http.createServer(app).listen(port, function () { });
server.timeout = 240000;
var io = require('socket.io').listen(server);
io.on('connection', function (socket) {
socket.on('csvDataFromUI', function(data) {
console.log("Data in kafka is = " + data);
});
//socket.emit('csvDataFromUI', payloadData);
});
/*************************************************** ******************************/ 新代码: 以下是:https://www.npmjs.com/package/kafka
UI 服务器 ui.js
将其创建为生产者:
var kafka = require('kafka');
var host = '192.168.2.12';
var port = 9098;
producer = new kafka.Producer({
host: host,
port: port,
topic: 'Postings',
partition: 0
});
producer.connect(function(reportJSON) {
console.log("rportJSON = " + reportJSON);
producer.send(reportJSON);
});
卡夫卡服务器kafkaProducer.js:
var kafkadata = require('kafka');
console.log("STARTING PRODUCER");
var consumer = new kafkadata.Consumer({
// these are the default values
host: '192.168.2.12',
port: 9098 ,
pollInterval: 2000,
maxSize: 1048576 // 1MB
})
consumer.on('message', function(topic, message) {
console.log(message)
})
consumer.connect(function() {
consumer.subscribeTopic({name: 'Postings', partition: 0})
})
ERROR I'm getting in UI server is: error: uncaughtException: connect ECONNREFUSED reportJSON = undefined
In Kafka server I'm can't see any receiving and getting ERROR: ReferenceError: message is not defined
最佳答案
看起来 io.connect
函数不是来自 npm socket.io
。来自client side portion of socket.io .因此,传统上您会使用 socket.io npm 来托管基于套接字的服务器,然后使用客户端套接字 io JS 库来连接并与所述服务器通信。
但是你想在服务器到服务器之间进行。根据这个Stack Overflow question ,最后一个答案表明,当您 npm install socket.io
时,它将自动在您的 node_modules
中托管一个版本。您也许可以执行以下操作:
var socketIoClient = require('socket.io-client');
var socket = socketIoClient.connect("http://192.168.2.12:9098");
编辑: 看起来他们导出了 client side code作为一个模块,所以应该可以做我上面提到的事情。我担心客户端 JS 不会作为模块转换为服务器端。
关于javascript - 如何在 2 个服务器之间创建套接字 io 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50257163/