与Socket.io重复的连接

时间:2017-09-04 20:05:16

标签: javascript node.js express socket.io

我已将socket.io与我的项目集成以获得实时功能。几乎每个都运行良好,但每次刷新页面时,锥形都不会关闭并重复,从而导致单个用户的多个连接。

这是套接字服务器中的套接字事件。

Sockets_server.js

socket.on('new-publication', function(data){
    console.log(data.pub);
    io.sockets.emit('new-publication', data)
})

socket.on('do-publication', function(data){
    console.log('Info: ' + data.nombre);
    io.sockets.emit('do-publication', data)
})

这是我的应用服务器。

Server.js

socket.on('new-publication', function(data){
                var datos_pub;
                console.log(data.pub);
                var currentdate = new Date();
                var datetime = currentdate.getFullYear() + "-"
                + (currentdate.getMonth()+1) + "-"
                + currentdate.getDate() + " "
                + currentdate.getHours() + ":"
                + currentdate.getMinutes() + ":"
                + currentdate.getSeconds();

                var publicacion = {
                    id_user : req.user.id,
                    publicacion : data.pub,
                    imagen : null,
                    fecha_pub : datetime
                };

                function formatoFecha(datestring){
                    var currentdate = new Date();
                    var fecha = new Date(datestring);
                    var hora;
                    var day = new Date(datestring);
                    var weekday = new Array(7);
                    weekday[0] =  "Domingo";
                    weekday[1] = "Lunes";
                    weekday[2] = "Martes";
                    weekday[3] = "Miercoles";
                    weekday[4] = "Jueves";
                    weekday[5] = "Viernes";
                    weekday[6] = "Sabado";
                    var daySemana = weekday[day.getDay()];

                    if (fecha.getDate() >= currentdate.getDate()) {
                        if (fecha.getHours() >= currentdate.getHours() && fecha.getMinutes() >= currentdate.getMinutes()) {
                            hora = 'hace un momento'
                        }else{
                            if (fecha.getMinutes()<10) {
                                hora = 'hoy a las ' + fecha.getHours() + ':0' + fecha.getMinutes();
                            }else{
                                hora = 'hoy a las ' + fecha.getHours() + ':' + fecha.getMinutes();
                            }

                        }

                    }else{
                        if (fecha.getMinutes()<10) {
                            hora = daySemana + ' ' + fecha.getDate() + ' a las ' + fecha.getHours() + ':0' + fecha.getMinutes();
                        }else{
                            hora = daySemana + ' ' + fecha.getDate() + ' a las ' + fecha.getHours() + ':' + fecha.getMinutes();
                        }
                    }

                    return hora;
                }

                function loadSelect(id) {

                    var resultado = {};
                    db.query('SELECT publicaciones.publicacion, publicaciones.fecha_pub, users.nombre AS nombre, users.image AS image FROM publicaciones JOIN users ON publicaciones.id_user = users.id where id_publicacion=' + id, function(err, rows, fields){


                        socket.emit('do-publication', {
                            nombre: rows[0].nombre,
                            publicacion: rows[0].publicacion,
                            fecha: formatoFecha(rows[0].fecha_pub),
                            image: rows[0].image
                        });
                    });
                }

                db.query('INSERT INTO publicaciones SET ?', publicacion, function(err, rows, fields){
                    if(err) throw err;
                    //db.end();
                    datos_pub =  rows.insertId;
                    loadSelect(datos_pub);


                });
          });

客户方:

SocketJQ.js

$(document).ready(function(){

  var socket = io.connect('http://localhost:8081', {transports: ['websocket'], upgrade: false});

  socket.on('do-publication', function(data){
    console.log(data.image);
    var imageprofile = "http://localhost:3000/images/upload_images/"+data.image;
   var $items = $('<div id="card-container" class="grid-item"><div class="card"><img class="avatar" src="'+imageprofile+'"><div class="name">'+data.nombre+'</div><div class="date">'+data.fecha+ '</div><p class="card">'+data.publicacion+'</p></div></div>');
   // prepend items to grid
   $grid.prepend( $items )
     // add and lay out newly prepended items
     .masonry( 'prepended', $items );
  })

  socket.on('users-connected', function(data){
    console.log('Usuarios conectados: ' + data);
  })

  $('#Button-Post-Publication').click(function(e){
    e.preventDefault();
    var publication = $('#Text-Area-Publication').val();
    var imagen = $('#upfile').val();
    console.log(imagen);
      if(imagen==""){
        socket.emit('new-publication', {pub: publication})
      }else{
        socket.emit('uploadfiles', {pub: publication, img: imagen})
      }

  })

})

0 个答案:

没有答案