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