Wednesday, 3 May 2017

Socket.io + Express + PHP data duplicate emit

i use node.js, express, and socket.io, for real time notification,

but evertime i restart the server, data emit will duplicate.. and duplicate data keep increament..

this is my server.js

var express         =   require('express')();
var server          =   require('http').Server(express);
var io              =   require('socket.io')(server);
var bodyParser      =   require('body-parser');

/* Initialize Sockets Servers */
server.listen(3030);

/* Init Body Parser */
express.use(bodyParser.urlencoded({
  extended: true
}));
express.use(bodyParser.json());

/* Get node_modules directory */
express.use('/node_modules', function (req, res) {
  res.sendfile(__dirname+req.originalUrl);
});

/* Collection Users Keys */
var collection_session          =   {};
var throwSockets;

/* Socket Connections */
io.on('connection', function (socket) {
    /* Set Session Keys From Client */
    socket.on('setSessionKeys', function (data) {
        data.socketKeys                         =   socket;
        collection_session[data.sessionID]      =   data.socketKeys;
    });

    socket.on('send_msg', function(data){
        socket.broadcast.emit('call_back_socket', data);
    });

    /* Throw Sockets */
    throwSockets    =   function(parameters){
        /* Looping Object */
        for(var value in parameters){
            /* This is duplicate emit */
            var keys            =   value;
            var countTotals     =   parameters[value];
            if(collection_session.hasOwnProperty(keys)){
                collection_session[keys].emit('overtime_notifications', parameters);
            }
        }
    }

});

/* Post Sockets */
express.post('/notification_overtime', function(req, res){
    throwSockets(req.body);
    res.send('success');
});

client side

var socket                          = io('http://<?php echo $_SERVER['SERVER_ADDR']; ?>:3030');
          var my_socket_connection;
          //var session_id                      = Math.floor((Math.random() * 100) + 1);
          var session_id                      = 4;
          var name;
          var status_socket                   = false;

          function myFunction() {
                var person = prompt("Please enter your name", "Test");
                name       = person;
                if(person == ''){
                    name    =   "default";
                }
           }

          socket.on('connect', function(){
            my_socket_connection              =  socket.id;
            var setting_up_connection_keys    = {
                    sessionID     :  session_id,
                    socketKeys    :  my_socket_connection
            }

            /* This Line send to Server */
            socket.emit('setSessionKeys', setting_up_connection_keys);
            my_socket_connection            =   socket;

            /* Check Status Sockets */
            status_socket           =   true;

            socket.on('call_back_socket', function(data){
                $("#screen").append("<p>"+data.name_sender+" : "+data.msg_sender+"</p>");
            });

            my_socket_connection.on('overtime_notifications', function(data){
                console.log(data);
            });
          });

          function handle(e){
                if(e.keyCode === 13){
                    e.preventDefault(); // Ensure it is only this code that rusn
                    if(status_socket){
                        var msg         =   $("#txt_message").val();
                        var create_textSocket   =   {
                            name_sender     :   name,
                            msg_sender      :   msg
                        }

                        socket.emit('send_msg', create_textSocket);

                        $("#screen").append("<p>"+name+" : "+msg+"</p>");
                        $("#txt_message").val('');
                    }else{
                        $("#screen").append("<p>Error Connections.</p>");
                    }
                }
            }

trigger emit, im using php for this one..

$handle             =   curl_init($_SERVER['SERVER_ADDR'].':3030/notification_overtime');
                curl_setopt($handle, CURLOPT_POST, true);
                curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($count_sockets));
                curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
                curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
                $response           =   curl_exec($handle);
                curl_close($handle);

inside $count_sockets
Array
(
    [4] => 388
)



via Kelvin Yusuf

No comments:

Post a Comment