Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Socket.io、NodeJS在页面刷新完成之前断开连接和不重新连接_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 如何使用Socket.io、NodeJS在页面刷新完成之前断开连接和不重新连接

Javascript 如何使用Socket.io、NodeJS在页面刷新完成之前断开连接和不重新连接,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在执行一项任务,在该任务中,我使用Node.js和socket.io、express和mysql events Node.js模块,在将新记录插入表时发出数据 我已经完成了所有要发射和显示的东西连接,但是我面临页面刷新问题。当我尝试单击另一个链接或刷新页面时,如果node.js服务器正在运行并不断发送数据,那么打开或刷新链接会花费很多时间。但是当node.js没有运行时,就没有问题了 我已尝试断开页面重新加载事件的连接,但这对我也没有帮助 更新 // server.js that runni

我正在执行一项任务,在该任务中,我使用Node.js和socket.io、express和mysql events Node.js模块,在将新记录插入表时发出数据

我已经完成了所有要发射和显示的东西连接,但是我面临页面刷新问题。当我尝试单击另一个链接或刷新页面时,如果node.js服务器正在运行并不断发送数据,那么打开或刷新链接会花费很多时间。但是当node.js没有运行时,就没有问题了

我已尝试断开页面重新加载事件的连接,但这对我也没有帮助

更新

// server.js that running on server side.

var app = require('express')();
var compression = require('compression');
app.use(compression());
var http = require('http').Server(app);
var io = require('socket.io').listen(http, {
  'transports': [
      'websocket'
    , 'flashsocket'
    , 'htmlfile'
    , 'xhr-polling'
    , 'jsonp-polling'
  ],
  'close timeout': 60,
  'heartbeat timeout': 60,
  });

var mysql = require('mysql');
var MySQLEvents = require('mysql-events');
var request = require('request');


var dsn = {
    host: 'localhost',
    user: 'root',
    password: 'tester'
};

var mysqlPool = mysql.createPool({
    connectionLimit : 25,
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: 'tester',
    database: 'test'
});
var myCon = MySQLEvents(dsn, {
  startAtEnd: false, // it overrides default value "true"
  includeEvents: ['writerows'],
  includeSchema: {'test': ['ttest']},
});

var barCols = [], barRows = [];
var pieCols = [], pieRows = [];
var jsonBarChart, jsonPieChart;

http.listen(3000, function(){
    console.log('Listening on Port 3000');
});

io.sockets.on('connection', function(socket){


//  console.log("====================== Connected ======================" +socket.id);
     var event1 = myCon.add(
      'test.ttest',
      function (oldRow, newRow) {
        if(newRow !== null){
            var data = {
                dd: newRow.fields,
            };
            io.emit('my-channel', data);

//      try {
//          global.gc();
//        } catch (e) {
//          console.log("You must run program with 'node --expose-gc index.js' or 'npm start'");
//          process.exit();
//        }
        }
      }
    );
     myCon.stop();
});
//html客户端

var socket = null;
    $(window).bind('beforeunload',function(){
        socket.disconnect();
    });

    $(document).ready(function(){
        var connectionOptions =  {
                "force new connection" : true,
                "reconnection": true,
                "reconnectionDelay": 2000,                  //starts with 2 secs delay, then 4, 6, 8, until 60 where it stays forever until it reconnects
                "reconnectionDelayMax" : 60000,             //1 minute maximum delay between connections
                "reconnectionAttempts": "Infinity",         //to prevent dead clients, having the user to having to manually reconnect after a server restart.
                "timeout" : 10000,                           //before connect_error and connect_timeout are emitted.
                "transports" : ['websocket', 'polling']                //forces the transport to be only websocket. Server needs to be setup as well/
        }

        socket = io('http://10.3.3.141:3000', connectionOptions);
        socket.on('open', function(){ console.log("Client Open a connection.");});

        socket.on('connect', function(){ 
            console.log("Client Connected.");

            socket.on("my-channel", function(msg){ 
                if(msg == null){
                    console.log("MSG is Null");
                    return;
                }

                var activityItem = '<div class="table-row"><div class="table-cell">'+msg.dd.ipaddress+'</div></div>';
                $("#activity-threat-body").prepend(activityItem);
                $("#activity-threat-body>.table-row:nth-child(6)").remove();
            });

        });
        socket.on('connect_timeout', function(){ console.log("Client Connection timeout.");});
        socket.on('connect_error', function(){ 
            console.log("Client connection error.");
            socket.connect();
        });
        socket.on('reconnect_attempt', function(){ console.log("Client reconnect attempt.");});
        socket.on('reconnect', function(){console.log("Client Reconnected.");});
        socket.on('reconnect_error', function(){ console.log("Client Reconnect Error.");});
        socket.on('reconnect_failed', function(){ console.log("Client Reconnect Failed.");});
        socket.on('close', function(){ console.log("Client connection closed.");});
        socket.on('disconnect', function(){
           console.log("Client Disconnected");
           socket.connect();
        });

    });
var socket=null;
$(窗口).bind('beforeunload',function(){
socket.disconnect();
});
$(文档).ready(函数(){
变量连接选项={
“强制新连接”:正确,
“重新连接”:正确,
“reconnectionDelay”:2000,//从2秒延迟开始,然后是4、6、8,直到60秒,直到重新连接为止
“重新连接延迟最大值”:60000,//连接之间的最大延迟为1分钟
“reconnectionAttempts”:“Infinity”,//为了防止客户端死机,用户必须在服务器重新启动后手动重新连接。
“timeout”:10000,//在发出connect\u错误和connect\u超时之前。
“传输”:['websocket','polling']//强制传输仅为websocket。还需要设置服务器/
}
套接字=io('http://10.3.3.141:3000连接选项);
on('open',function(){console.log(“客户端打开连接”);});
socket.on('connect',function(){
log(“客户端已连接”);
socket.on(“我的频道”,函数(msg){
如果(msg==null){
log(“MSG为Null”);
返回;
}
var activityItem=''+msg.dd.ipaddress+'';
$(“#活动威胁体”)。前置词(活动项);
$(“#活动威胁体>。表行:第n个子项(6)”).remove();
});
});
on('connect_timeout',function(){console.log(“客户端连接超时”);});
socket.on('connect_error',function(){
log(“客户端连接错误”);
socket.connect();
});
on('reconnect_trunt',function(){console.log(“Client reconnect trunt”);});
on('reconnect',function(){console.log(“客户端重新连接”);});
on('reconnect_error',function(){console.log(“Client reconnect error”);});
on('reconnect_failed',function(){console.log(“Client reconnect failed”);});
on('close',function(){console.log(“客户端连接已关闭”);});
socket.on('disconnect',function()){
console.log(“客户端断开连接”);
socket.connect();
});
});

为什么在终止节点后仍然刷新页面?我想刷新客户端html 5页面,而不是节点。我不会停止Nodejs服务器。请输入代码。谢谢。我已经用服务器端和客户端更新了我的问题。我想在自动断开连接时进行连接。为什么在终止节点后仍然刷新页面?我想刷新客户端html 5页面,而不是节点。我不会停止Nodejs服务器。请输入代码。谢谢。我已经用服务器端和客户端更新了我的问题。我想在它自动断开时连接。