代码之家  ›  专栏  ›  技术社区  ›  Shalabh Negi

如何在两台服务器之间创建套接字io连接

  •  1
  • Shalabh Negi  · 技术社区  · 6 年前

    我有两个服务器,一个是UI服务器,另一个是kafka服务器。

    UI服务器中的javascript文件从csv文件中获取数据,我逐行读取该文件并将其转换为JSON。我需要将这些JSON格式的逐行读取数据发送到我的Kafka producer服务器。用于进一步工作。这两台服务器都有自己的专用IP地址。e、 g.卡夫卡服务器有192.168.2.12:9098

    reportJSON是在UI服务器js文件中获取csv数据的变量。

    当我尝试运行ui服务器的js文件时,它显示错误:

    2018-05-09T15:18:56.147Z-错误:未捕获异常:io。连接不是 a功能日期=2018年5月9日星期三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 producer 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);
    });
    

    Kafka服务器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})
        })
    

    我在UI服务器中遇到的错误是:错误:uncaughtException:连接 EConRefused reportJSON=未定义

    在Kafka服务器中,我看不到任何接收和获取错误: ReferenceError:未定义消息

    1 回复  |  直到 6 年前
        1
  •  3
  •   Max Baldwin    6 年前

    看起来像是函数 io.connect 不来自npm socket.io .它来自 client side portion of socket.io .所以传统上你会使用插座。io npm托管基于套接字的服务器,然后使用客户端套接字io JS lib连接并与所述服务器通信。

    但您希望在服务器到服务器之间执行此操作。根据这个 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不能作为模块转换到服务器端。