Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • Meteor SocketIO Client-server Connection Not Established

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 485
    Answer it

    I’m trying to connect a client app locally deployed to a server app I deployed to heroku, using socket.io. The app works great locally but I can’t establish the web sockets when deployed to heroku.

     

    My server code:

     

    import { Meteor } from 'meteor/meteor';
    import "../imports/api/salaDeVenta.js"
    import "../imports/api/dispositivo.js"
    import "../imports/api/empresa.js"
    
    import {SalaDeVenta} from "../imports/api/salaDeVenta.js";
    import { Dispositivo } from "../imports/api/dispositivo.js";
    
    Meteor.startup(() => {
    // @ts-nocheck
    var Collections = require('typescript-collections');
    var dictScheduling =  new Collections.MultiDictionary(); //HAY QUE GUARDAR LOS J ACA
    var dict =  new Collections.Dictionary();
    
    var socketVar = null
    var app = require('http').createServer(handler)
    var io = require('socket.io')(app);
    var fs = require('fs');
    var portToListen = 8080
    var server = app.listen({
      host: '127.0.0.1',
      port: 8080,
    }, function(data) {
      console.log('------CALLBACKS DATA: ' , data)
      var host = server.address().address;
      var portp = server.address().port;
      console.log('Example app listening at http://%s:%s', host, portp);
    });
    //SCHEDULING <------------------------
    var schedule = require('node-schedule');
    
    var salasDeVenta = SalaDeVenta.find({}).fetch()
    //console.log(salasDeVenta)
    salasDeVenta.map((salaDeVenta,salaDeVentai)=>{
     //console.log(salaDeVenta.name)
     //para el schedule de despertar
     var dispositivoEnCabeza = Dispositivo.find({ idSalaDeVentas: salaDeVenta._id, dispCabeza: true}).fetch()
        dispositivoEnCabeza.map((dispEnCabeza,dispEnCabezai)=>{
            //console.log(dispEnCabeza.especificaciones + dispEnCabeza.direccionMAC)
            var res = salaDeVenta.turnOnHour.split(":") // PUEDE QUE FALLE AL NO HABER HECHO TRIM DEL 0
            var dispositivosPorSalaDeVenta = Dispositivo.find({ idSalaDeVentas: salaDeVenta._id}).fetch()
           // console.log(dispositivosPorSalaDeVenta);
            var j1 = schedule.scheduleJob({hour: res[0], minute: res[1]}, function(){
             // console.log("HASTA")
               //EXCUTE WAKE ON LAN PROTOCOL
               var dispositivosALevantar = dispositivosPorSalaDeVenta
               //console.log("DONDE")
               dispositivosPorSalaDeVenta.map((dispActual,dispActuali)=>{
                //console.log(dispEnCabeza.especificaciones + dispEnCabeza.direccionMAC)
                  dict.getValue(dispEnCabeza.direccionMAC).emit('wakePCByMAC',dispActual.direccionMAC) 
               });
    
              });
            j1.disp = dispEnCabeza.especificaciones;
            dictScheduling.setValue(salaDeVenta._id,j1)
            console.log("wakeonlan scheduled for device with MAC ADDRESS " + dispEnCabeza.direccionMAC + " at "+salaDeVenta.turnOnHour);
    
        });
    //para el schedule de apagar
    var dispositivosPorSalaDeVenta = Dispositivo.find({ idSalaDeVentas: salaDeVenta._id}).fetch()
    dispositivosPorSalaDeVenta.map((dispActual,dispActuali)=>{
      var res = salaDeVenta.turnOffHour.split(":") // PUEDE QUE FALLE AL NO HABER HECHO TRIM DEL 0
      var j2 = schedule.scheduleJob({hour: res[0], minute: res[1]}, function(){
         //EXCUTE SLEEP PROTOCOL
         dict.getValue(dispActual.direccionMAC).emit('sleepPCByMAC')
        });
      j2.disp = dispActual.especificaciones;
      dictScheduling.setValue(salaDeVenta._id,j2)
      console.log("sleep scheduled for device with MAC ADDRESS " + dispActual.direccionMAC + " at "+salaDeVenta.turnOffHour);
    
    });
    
    });
    
    
    //-------------TEST-------------------
    
    //No puedee ser 00 el tiempo, tiene que ser 0
    //Cuando se corre el servidor por primera vez, la libreria usa la hora del sistema en ESE momento, por lo que cambiar la hora del sistema luego de haber iniciado el servidor no tiene ningun efecto
    var j = schedule.scheduleJob({hour: 10, minute: 02}, function(){
      console.log("THIS IS IT");
      });
    
    //-------------------------------------
    
    
      //SOCKETS XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    function handler (req, res) {
      fs.readFile(__dirname + '/index.html',
      function (err, data) {
        if (err) {
          res.writeHead(500);
          return res.end('Error loading index.html');
        }
    
        res.writeHead(200);
        res.end(data);
      });
    }
    
    io.on('connection',Meteor.bindEnvironment((socket)=> {
      var maciD;
      console.log("connection attempt...")
      socketVar = socket;
      socketVar.emit('IdentifySocket')
      socketVar.on('MACIdentification',  Meteor.bindEnvironment((MACIdentification) =>{
        console.log('The client with MAC address ' + MACIdentification + ' has joined the server' );
        dict.setValue(MACIdentification,socketVar);
        dict.getValue(MACIdentification).emit('SocketValidationTest')
        Meteor.call('dispositivos.updateConnection',MACIdentification,true)
        maciD = MACIdentification
      }));
      socketVar.on('disconnect', Meteor.bindEnvironment(function() {
        console.log('The client with MAC address ' + maciD + ' has disconnected')
        Meteor.call('dispositivos.updateConnection',maciD,false)
    
      }));  
    }));
    
    
      //METHODS
      Meteor.methods({
    
        foo: function () {
            return 1;
        },
    
        bar: function () {
        // QUESTION: HOW TO CALL Meteor.methods.foo
    
            return 1 + foo;
    
        },
    
        'socket.sendWakeMessageToMAC':function(pconMac){
    
          var res = pconMac.split("-")
          console.log("DIR MAC CABEZA "+ res[0])
          console.log("DIR MAC TO "+ res[1])
          dict.getValue(res[0]).emit('wakePCByMAC',res[1])
          //socketVar.emit('wakePCByMAC', DirecconMAC);
      },
    
      'socket.sendSleepMessageToMAC':function(DirecconMAC){
        dict.getValue(DirecconMAC).emit('sleepPCByMAC')
        //socketVar.emit('sleepPCByMAC', DirecconMAC);
    },
    
    'schedule.updateEncendidoYApagadoBySalaDeVentas':function(idSalaDeVentas){
      console.log("-------RESCHEDULING-----------------");
      dictScheduling.getValue(idSalaDeVentas).forEach(cancelSchedules);
      function cancelSchedules(item, index) {
        console.log(item.disp + "cancelled")
        item.cancel();
      }
      dictScheduling.remove(idSalaDeVentas)
      var salasDeVenta = SalaDeVenta.find({_id: idSalaDeVentas}).fetch()
      salasDeVenta.map((salaDeVenta,salaDeVentai)=>{
       //para el schedule de despertar
       var dispositivoEnCabeza = Dispositivo.find({ idSalaDeVentas: salaDeVenta._id, dispCabeza: true}).fetch()
          dispositivoEnCabeza.map((dispEnCabeza,dispEnCabezai)=>{
              var res = salaDeVenta.turnOnHour.split(":") // PUEDE QUE FALLE AL NO HABER HECHO TRIM DEL 0
              var dispositivosPorSalaDeVenta = Dispositivo.find({ idSalaDeVentas: salaDeVenta._id}).fetch()
              var j1 = schedule.scheduleJob({hour: res[0], minute: res[1]}, function(){
                 //EXCUTE WAKE ON LAN PROTOCOL
                 var dispositivosALevantar = dispositivosPorSalaDeVenta
                 dispositivosPorSalaDeVenta.map((dispActual,dispActuali)=>{
                    dict.getValue(dispEnCabeza.direccionMAC).emit('wakePCByMAC',dispActual.direccionMAC) 
                 });
    
                });
                j1.disp = dispEnCabeza.especificaciones;
              dictScheduling.setValue(salaDeVenta._id,j1)
              console.log("wakeonlan scheduled for device with MAC ADDRESS " + dispEnCabeza.direccionMAC + " at "+salaDeVenta.turnOnHour);
    
          });
      //para el schedule de apagar
      var dispositivosPorSalaDeVenta = Dispositivo.find({ idSalaDeVentas: salaDeVenta._id}).fetch()
      dispositivosPorSalaDeVenta.map((dispActual,dispActuali)=>{
        var res = salaDeVenta.turnOffHour.split(":") // PUEDE QUE FALLE AL NO HABER HECHO TRIM DEL 0
        var j2 = schedule.scheduleJob({hour: res[0], minute: res[1]}, function(){
           //EXCUTE SLEEP PROTOCOL
           dict.getValue(dispActual.direccionMAC).emit('sleepPCByMAC')
          });
          j2.disp = dispActual.especificaciones;
        dictScheduling.setValue(salaDeVenta._id,j2)
        console.log("sleep scheduled for device with MAC ADDRESS " + dispActual.direccionMAC + " at "+salaDeVenta.turnOffHour);
    
      });
    
      });
    
      console.log("-------ReschedulingOVER-----------------");
    },
    
     });
    
    });

     

    My client code:

    import { Meteor } from 'meteor/meteor';
    import io from 'socket.io-client';
    
    Meteor.startup(() => {
    // code to run on server at startup
    
    //WAKE UP PC BY MAC When message is received through socket
    const socket = io('http://hwmonitool.herokuapp.com/');
    
      console.log("relaunch")
      socket.on('wakePCByMAC', function (MacAddressReceived) {
        console.log(MacAddressReceived);
        const wol = require('wakeonlan')
    
        // MAC is case-insensitive. colons optional
         wol(MacAddressReceived).then(() => {
         console.log('wol sent!')
    
      })
      },
    
      //SLEEPS PC when message is received rhoeough PC
      );
      socket.on('sleepPCByMAC', function () {
        var cmd=require('node-cmd');
        cmd.run('rundll32.exe powrprof.dll,SetSuspendState 0,1,0');
      },
      );
    
      //IDENTIFIES the computer
      socket.on('IdentifySocket', function () {
        var macaddress = require('macaddress');
    
        macaddress.one('Ethernet', function (err, mac) {
          console.log("Mac address for Ethernet: %s", mac);  
          socket.emit('MACIdentification', mac)
        });
      },
      );
    
     //TEST 
    socket.on('SocketValidationTest', function () {
      console.log('AIGHT')
    },
    );
    
    
    
      //METHODS
      Meteor.methods({
    
        foo: function () {
          console.log(":(")
          var cmd=require('node-cmd');
          cmd.run('rundll32.exe powrprof.dll,SetSuspendState 0,1,0');
            return 1;
        },
    
        bar: function () {
    
        // QUESTION: HOW TO CALL Meteor.methods.foo
    
        return 1 + foo;        
    
        },
    
        'socket.sendMessage':function(){
          socket.emit('my other event', { message: 'message' });
      },
     });
    }
    );

    Whenever I run my client app, I think there is a connection attempt, since heroku’s server app begin printing the following lines. However, no connection is ever established. The information provided by the socket-io debugging system is non-existent. I don’t know what could be the source of the problem and I ran out of ideas. I would really appreciate some ideas on what could the problem be and how to solve it. THANKS!

    2019-09-26T20:33:23.248253+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlHqdj&b64=1" host=hwmonitool.herokuapp.com request_id=815b548d-dbd2-4fc4-8c07-4d26d5356058 fwd="190.85.77.232" dyno=web.1 connect=0ms service=4ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:23.399404+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlHqg9&b64=1" host=hwmonitool.herokuapp.com request_id=419aa329-cbdb-48bc-bc7c-0bf7ecec20ca fwd="190.85.77.232" dyno=web.1 connect=0ms service=5ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:28.412723+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlHruI&b64=1" host=hwmonitool.herokuapp.com request_id=96dcbfcb-4c3f-4e36-9125-76af5bba3f52 fwd="190.85.77.232" dyno=web.1 connect=1ms service=8ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:28.547917+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlHrwk&b64=1" host=hwmonitool.herokuapp.com request_id=2c3bb984-9076-4b9f-a45b-e6883f12efe5 fwd="190.85.77.232" dyno=web.1 connect=0ms service=3ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:33.566847+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlHt8t&b64=1" host=hwmonitool.herokuapp.com request_id=f6b7897a-18bd-4964-8041-f50d44574d53 fwd="190.85.77.232" dyno=web.1 connect=1ms service=4ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:33.719816+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlHtBO&b64=1" host=hwmonitool.herokuapp.com request_id=65ceb84b-328a-4f45-9b35-efa735c465b0 fwd="190.85.77.232" dyno=web.1 connect=1ms service=10ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:38.729319+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlHuPY&b64=1" host=hwmonitool.herokuapp.com request_id=1484a69f-bd67-4ad9-a03a-4c91d846c67b fwd="190.85.77.232" dyno=web.1 connect=1ms service=8ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:38.881143+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlHuS3&b64=1" host=hwmonitool.herokuapp.com request_id=3adf54da-612b-4890-804d-f8701d5c67ea fwd="190.85.77.232" dyno=web.1 connect=0ms service=5ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:43.882337+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlHvgC&b64=1" host=hwmonitool.herokuapp.com request_id=ad78dfac-1cac-4d25-9941-97fe29074538 fwd="190.85.77.232" dyno=web.1 connect=0ms service=3ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:44.030293+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlHviW&b64=1" host=hwmonitool.herokuapp.com request_id=adef9a95-a249-4c03-bdb4-1b224e50bf63 fwd="190.85.77.232" dyno=web.1 connect=0ms service=5ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:49.039047+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlHwwg&b64=1" host=hwmonitool.herokuapp.com request_id=2427bba1-48a1-4a49-9aa6-4804716a4fbd fwd="190.85.77.232" dyno=web.1 connect=1ms service=4ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:49.200997+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlHwz7&b64=1" host=hwmonitool.herokuapp.com request_id=619d9b26-b2c6-4851-a16b-4c44c162a01a fwd="190.85.77.232" dyno=web.1 connect=0ms service=6ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:54.197094+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlHyBG&b64=1" host=hwmonitool.herokuapp.com request_id=413a834d-85e2-475b-9a0a-ddf3a4a8bcab fwd="190.85.77.232" dyno=web.1 connect=0ms service=5ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:54.348955+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlHyDh&b64=1" host=hwmonitool.herokuapp.com request_id=3d3105b5-35b4-4422-858f-519df67a1125 fwd="190.85.77.232" dyno=web.1 connect=0ms service=4ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:59.560996+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlHzVC&b64=1" host=hwmonitool.herokuapp.com request_id=189a264a-a244-4632-b64b-31c50a90dd34 fwd="190.85.77.232" dyno=web.1 connect=1ms service=4ms status=200 bytes=2026 protocol=http
    2019-09-26T20:33:59.414639+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlHzRq&b64=1" host=hwmonitool.herokuapp.com request_id=8e26e925-449d-409a-b46c-ac4660ba8789 fwd="190.85.77.232" dyno=web.1 connect=0ms service=8ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:04.570754+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlH-jM&b64=1" host=hwmonitool.herokuapp.com request_id=a82e8a58-b9aa-40b6-9cd6-a46c61d65e50 fwd="190.85.77.232" dyno=web.1 connect=1ms service=7ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:04.720824+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlH-ln&b64=1" host=hwmonitool.herokuapp.com request_id=c305a604-da21-42b0-ba19-348afc89054a fwd="190.85.77.232" dyno=web.1 connect=0ms service=5ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:09.723010+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlH_zv&b64=1" host=hwmonitool.herokuapp.com request_id=0d4a471f-6012-414d-bbab-0447b545bec0 fwd="190.85.77.232" dyno=web.1 connect=0ms service=8ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:09.882613+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlI00J&b64=1" host=hwmonitool.herokuapp.com request_id=c44c6d64-8bb7-473d-8ff3-ddf4b42c6f1d fwd="190.85.77.232" dyno=web.1 connect=1ms service=13ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:14.875853+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlI1ER&b64=1" host=hwmonitool.herokuapp.com request_id=72f083b6-d06b-4504-bf5d-e45a433ec23c fwd="190.85.77.232" dyno=web.1 connect=0ms service=5ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:15.030964+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlI1Go&b64=1" host=hwmonitool.herokuapp.com request_id=673699c2-0851-47b2-b60e-f8997cde5361 fwd="190.85.77.232" dyno=web.1 connect=1ms service=8ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:20.033573+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlI2Uw&b64=1" host=hwmonitool.herokuapp.com request_id=a9da6da5-396b-4753-9e5d-512493c53475 fwd="190.85.77.232" dyno=web.1 connect=1ms service=9ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:20.196098+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlI2XR&b64=1" host=hwmonitool.herokuapp.com request_id=c722107d-99ab-450b-84e6-d1b5109085e7 fwd="190.85.77.232" dyno=web.1 connect=1ms service=12ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:25.191264+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlI3la&b64=1" host=hwmonitool.herokuapp.com request_id=c9a6ab60-aab4-46d2-9dff-48e79e542f4b fwd="190.85.77.232" dyno=web.1 connect=1ms service=5ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:25.351664+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlI3n-&b64=1" host=hwmonitool.herokuapp.com request_id=660c977f-3b42-4878-b912-fccc5a8fb67a fwd="190.85.77.232" dyno=web.1 connect=1ms service=10ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:30.346371+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=MrlI508&b64=1" host=hwmonitool.herokuapp.com request_id=8225df63-8b7b-4105-a6c1-95bcd8069616 fwd="190.85.77.232" dyno=web.1 connect=0ms service=3ms status=200 bytes=2026 protocol=http
    2019-09-26T20:34:30.495179+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=MrlI52Z&b64=1" host=hwmonitool.herokuapp.com request_id=4f37b176-c3cc-4a19-a986-5cab9e9e5522 fwd="190.85.77.232" dyno=web.1 connect=0ms service=5ms status=200 bytes=2026 protocol=http

 0 Answer(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: