javascript - 如何在 2 个服务器之间创建套接字 io 连接

标签 javascript node.js socket.io apache-kafka kafka-producer-api

我有 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/

相关文章:

JavaScript 函数内的 Var 处理

javascript - 具有多个条件和切片的 MongoDB 查询

python - 如何在 flask-socketio 中保持活力?

javascript - 正则表达式匹配上的Nodejs Socket io

javascript - 直接使用数组或将其分配给变量并使用它哪个更好?

javascript - 如何替换数组中的某个符号?

javascript - 使用 Angular Material 步进器在输入类型文本中添加自定义验证

node.js - 数据库是否附加到 heroku 中的测功机?

javascript - 如何获取 express.js 中的所有参数(post/get/etc.)

加载 socket.io.js 时 Node.js "Uncaught SyntaxError: Unexpected token <"