Note that there are some explanatory texts on larger screens.

plurals
  1. PODisconnect event fired many times in socket.io
    text
    copied!<p>I've implemented a simple chat application .But when client leaves the page or closes browser tab disconnect event is called many times. Some time twice some time thrice. Inside disconnect call back function i'm inserting chat history into database. As callback function is calling many times same chat history is inserting many times. Dont know what is the problem. Please help.</p> <p>Code is like this</p> <p>Server side code</p> <pre><code>var sys = require('sys'); var fs = require('fs'); var io = require('socket.io'); var connection = function(){ sys.puts("Here") var mysql = require('mysql'); var sql = mysql.createConnection({ host:'localhost', port:3306, user:'root', password:'root' }); sql.query('use chat'); sys.puts("Here" +sql) return sql; } var Server = require('http').createServer(function(req, response){ sys.puts("request recieved"); response.writeHeader(200,{"Content-Type":"text/html"}); response.write("Hello World"); var rs = fs.createReadStream(__dirname + '/chat.html') sys.pump(rs,response); }); var history = ""; var socket = io.listen(Server); var mysql = connection(); socket.sockets.on('connection',function(client){ sys.puts("socket connected ID "+client.id); sys.puts("session id",client.handshake.sessionID) var username; client.send('Welcome to chat'); client.send('Enter your name'); client.on('message',function(message){ if(!username) { username = message; client.send('Welcome,' +username); return; } feedback = username+' sent:'+message; history = history + feedback + '\n'; client.send(feedback) client.broadcast.send(feedback); sys.puts("History is " +history); sys.puts("mysql" +mysql); client.on('disconnect',function(){ mysql.query('insert into tblchatHistory (fldChatHistory) values ("'+history+'")',function(err){ sys.puts("error" +err); history = ""; }) sys.puts("socket connected ID "+client.id); }) }) }) Server.listen(4000); </code></pre> <p>Client side code</p> <pre><code> &lt;script type="text/javascript"&gt; var socket; socket = new io.connect("http://localhost:4000"); var connect = false; socket.on('connect',function(){ alert("connected "+socket.socket.sessionid); connect = true; }) function chat() { socket.on('message',function(message){ var data = message; var list ='&lt;li&gt;' +data +'&lt;/li&gt;' document.getElementById("log").innerHTML +=list; }) } function sendMsg(event) { var entry = document.getElementById("entry"); var msg = entry.value; if(event.keyCode != 13)return if(msg) { if(connect) { socket.emit('message',msg); entry.value = ""; } } } &lt;/script&gt; &lt;body onload="chat();"&gt; &lt;h1&gt;Chat&lt;/h1&gt; &lt;div&gt;&lt;ul id="log"&gt;&lt;/ul&gt;&lt;/div&gt; &lt;div id="console"&gt; &lt;input type="text" id="entry" onkeypress="sendMsg(event);"/&gt; &lt;/div&gt; &lt;div&gt;&lt;a href="http://localhost:8085/BillDesk/welcomeJSF.jsf" &gt;Exit chat&lt;/a&gt;&lt;/div&gt; &lt;/body&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload