如何在2台服务器之间创建socket io连接

时间:2018-05-09 15:36:44

标签: 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 - 错误:uncaughtException:io.connect不是   功能日期= 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);
});

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服务器中遇到的错误:error:uncaughtException:connect   ECONNREFUSED reportJSON = undefined

     

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

1 个答案:

答案 0 :(得分:3)

看起来函数io.connect不是来自npm socket.io。它来自client side portion of socket.io。所以传统上你会使用socket.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不会将服务器端转换为模块。