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