我已将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})
}
})
})