Socket.io: JS рдЕрдкрд╡рд╛рдж рдХреЗрд╡рд▓ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░рд╣рддреЗ рд╣реБрдП рдлреЗрдВрдХреЗ рдЧрдП (WebSocket рдкрд╣рд▓реЗ рд╕реЗ рд╣реА CLOSING рдпрд╛ CLOSED рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИред)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдордИ 2018  ┬╖  55рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: socketio/socket.io

рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐:

  • [x] рдПрдХ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ
  • [] рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░

рдПрдХ рд╕реЙрдХреЗрдЯ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╕реЙрдХреЗрдЯ.io рдорд╢реАрдирд░реА рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЧрдпрд╛ (рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд▓рдЧрд╛рддрд╛рд░) рдПрдХ рдЕрдкрд╡рд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ backo2/index.js рд▓рд╛рдЗрди 83. рд╡рд╣ рддреНрд░реБрдЯрд┐ рд╣реИ:

WebSocket is already in CLOSING or CLOSED state.

socket-io-errors

рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо (рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдмрдЧ рд╣реИ)

рдореЗрд░реЗ рдкрд╛рд╕ https рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ (рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ) рд╕реЗ рдЬреБрдбрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рджреЛ рдЯреИрдм рдЦреБрд▓реЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдмреЗрдХрд╛рд░ рдмреИрдареЗ рд╣реИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рд╕рд░реНрд╡рд░ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ (рд╕рд┐рд╡рд╛рдп рдЬреЛ рдХреБрдЫ рднреА рдЬреАрд╡рд┐рдд рдкрд┐рдВрдЧреНрд╕ socket.io рдХрд░ рд░рд╣рд╛ рд╣реИ)ред рд╡реЗ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдЪреИрдирд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ (рд╕рд░реНрд╡рд░ рдкрд░ join(..) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред рдирд╣реАрдВ рддреЛ рдФрд░ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВред

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ:

var httpsServer = https.createServer(..);
var io = require("socket.io")(httpsServer);
io.on("connection",onSocketConnection);

рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдореЗрдВ:

socket = io();
socket.on("connect",function(){
   console.log("socket connected");
});
socket.on("disconnect",function(){
   console.log("socket disconnected");
});

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрд╢рди рдФрд░ рд░реАрдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХреЗ рдЧрдП рдирдХрд▓реА рдЬреЗрдПрд╕ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред

рд╕реЗрдЯ рдЕрдк

  • рдУрдПрд╕: рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдХреНрд░реЛрдо 66, рдиреЛрдб 10.2.1
  • рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рд╕рдВрд╕реНрдХрд░рдг: 2.1.1

рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА (рдЬреИрд╕реЗ рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕, рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ, рд╕реБрдЭрд╛рд╡ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ)

рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕:

index.js:83 WebSocket is already in CLOSING or CLOSED state.
(anonymous) @ index.js:83
e.encodePacket @ index.js:83
(anonymous) @ index.js:83
r.write @ index.js:83
r.send @ index.js:83
r.flush @ index.js:83
r.sendPacket @ index.js:83
r.ping @ index.js:83
(anonymous) @ index.js:83
setTimeout (async)
r.setPing @ index.js:83
r.onPacket @ index.js:83
(anonymous) @ index.js:83
r.emit @ index.js:83
r.onPacket @ index.js:83
r.onData @ index.js:83
ws.onmessage @ index.js:83

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП 60000 (v2.0.4) рд╕реЗ 5000 (v2.1.0+) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬреЛ рдХреНрд░реЛрдо рдЬреИрд╕реЗ рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рдирд╡реАрдирддрдо v2.2.0 рд╕рд╣рд┐рдд v2.1.0+ рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрдбрд╝реЗ рдорд╛рди рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реИ:

const http = require('http');
const server = http.createServer();
const io = require('socket.io')(server, {
  pingTimeout: 60000,
});

рдпрд╛

const io = require('socket.io')();
const http = require('http');
const server = http.createServer();
io.attach(server, {
  pingTimeout: 60000,
});

рд╕рднреА 55 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдФрд░ рдХреЛрдб рд╕рд╣реА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрд░реЛрдо рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдореЛрдЬрд╝рд┐рд▓рд╛ рд╕рд╛рдл рд╣реИред рдХреНрд░реЛрдо рдореЗрдВ, рдпрд╣ рддреНрд░реБрдЯрд┐ рдмрд╛рд░-рдмрд╛рд░ рдмрд╛рд░рд┐рд╢ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╕рднреА рдЪреИрдЯ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
socket.on('disconnect', () =>{ socket.disconnect(); });
рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд░реЗрдкреЛ https://github.com/antoniab123456/Chat_app

рдпрд╣рд╛рдБ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛
image

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрд╕ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИ, рдлрд┐рд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВред

рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдФрд░ рдореИрдХ рдУрдПрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛

рд╣рд╛рдБ рджреЛрд╕реНрддреЛрдВ, рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдПрдХ рдФрд░ рдкрдВрдХреНрддрд┐ рдЪрд╛рд╣рд┐рдП?

рдореБрдЭреЗ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдФрд░ рдХреНрд░реЛрдо рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ
рдореИрдХ рдУрдПрд╕ 10.13.5
рдХреНрд░реЛрдо рд╕рдВрд╕реНрдХрд░рдг 67.0.0.3396.87 (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмрд┐рд▓реНрдб) (64-рдмрд┐рдЯ)
рдиреЛрдб: 10.3.0
рдПрдХреНрд╕рдкреНрд░реЗрд╕: тАЛтАЛ4.16.3
рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ: 2.1.1

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред

рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг рдиреАрдЪреЗ:

index.js:83 WebSocket is already in CLOSING or CLOSED state.
(anonymous) | @ | index.js:83
┬а | e.encodePacket | @ | index.js:83
┬а | (anonymous) | @ | index.js:83
┬а | r.write | @ | index.js:83
┬а | r.send | @ | index.js:83
┬а | r.flush | @ | index.js:83
┬а | r.sendPacket | @ | index.js:83
┬а | r.ping | @ | index.js:83
┬а | (anonymous) | @ | index.js:83
┬а | setTimeout (async) | ┬а | ┬а
┬а | r.setPing | @ | index.js:83
┬а | r.onPacket | @ | index.js:83
┬а | (anonymous) | @ | index.js:83
┬а | r.emit | @ | index.js:83
┬а | r.onPacket | @ | index.js:83
┬а | r.onData | @ | index.js:83
┬а | ws.onmessage | @ | index.js:83

рдЬрдм рдореИрдВ index.js:83 рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдореБрдЭреЗ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ:

/**
 * Expose `Backoff`.
 */

module.exports = Backoff;

/**
 * Initialize backoff timer with `opts`.
 *
 * - `min` initial timeout in milliseconds [100]
 * - `max` max timeout [10000]
 * - `jitter` [0]
 * - `factor` [2]
 *
 * <strong i="16">@param</strong> {Object} opts
 * <strong i="17">@api</strong> public
 */

function Backoff(opts) {
  opts = opts || {};
  this.ms = opts.min || 100;
  this.max = opts.max || 10000;
  this.factor = opts.factor || 2;
  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;
  this.attempts = 0;
}

/**
 * Return the backoff duration.
 *
 * <strong i="18">@return</strong> {Number}
 * <strong i="19">@api</strong> public
 */

Backoff.prototype.duration = function(){
  var ms = this.ms * Math.pow(this.factor, this.attempts++);
  if (this.jitter) {
    var rand =  Math.random();
    var deviation = Math.floor(rand * this.jitter * ms);
    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;
  }
  return Math.min(ms, this.max) | 0;
};

/**
 * Reset the number of attempts.
 *
 * <strong i="20">@api</strong> public
 */

Backoff.prototype.reset = function(){
  this.attempts = 0;
};

/**
 * Set the minimum duration
 *
 * <strong i="21">@api</strong> public
 */

Backoff.prototype.setMin = function(min){
  this.ms = min;
};

/**
 * Set the maximum duration
 *
 * <strong i="22">@api</strong> public
 */

Backoff.prototype.setMax = function(max){
  this.max = max;
};

/**
 * Set the jitter
 *
 * <strong i="23">@api</strong> public
 */

Backoff.prototype.setJitter = function(jitter){
  this.jitter = jitter;
};




//////////////////
// WEBPACK FOOTER
// ./~/backo2/index.js
// module id = 41
// module chunks = 0

рд▓рд╛рдЗрди 83 рд╣реИ:

this.jitter = jitter;

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, backo2.js рдФрд░ рд▓рд╛рдЗрди 83 рдореЗрдВред рдпрд╣рд╛рдБ рдореЗрд░реА рддреНрд░реБрдЯрд┐ рд╣реИ:
index.js:83 Uncaught TypeError: 'FileReader' рдкрд░ 'readAsArrayBuffer' рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рдкреИрд░рд╛рдореАрдЯрд░ 1 'рдмреНрд▓реЙрдм' рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╣реАрдВ рд╣реИред
n рдкрд░ (index.js:83)
n рдкрд░ (index.js:83)
n рдкрд░ (index.js:83)
n рдкрд░ (index.js:83)
n рдкрд░ (index.js:83)
n рдкрд░ (index.js:83)
Object.e.removeBlobs рдкрд░ (index.js:83)
рдПрд╕ рдкрд░ (index.js:83)
r.encode рдкрд░ (index.js:83)
r.packet рдкрд░ (index.js:83)
рдФрд░ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рд╡реЗ рд╕рднреА 83 рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реИрдВ, рдЬреЛ this.jitter = jitter; рд╣реИ
рдпрд╣ рдореБрдЭреЗ рдЗрддрдирд╛ рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Google рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ? @antoniab123456 рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдЪреИрдЯ рдРрдк рдХреЛ рдареАрдХ рдХрд░ рдкрд╛рдП рддрд╛рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдЪреИрдЯ рдХреА рдирдХрд▓ рди рдХрд░реЗ? рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рд╡рд╣реА рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕реЗрдЯ рдЕрдк
рдУрдПрд╕: рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕
рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдХреНрд░реЛрдо 67.0.3396.99 (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмрд┐рд▓реНрдб) (64-рдмрд┐рдЯ)
рдиреЛрдб v10.5.0
Socket.io v2.1.1

рдореБрдЭреЗ рдХреНрд░реЛрдо рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдЯреАрдХ рд╕рдорд╕реНрдпрд╛ @getify рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд╛рдордХрд╛рдЬ рдорд┐рд▓рд╛ рд╣реИ?

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддрд╛ рд╣реИ?

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рд╕реЗрдЯ рдЕрдк
рдУрдПрд╕: рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕
рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдХреНрд░реЛрдо 67.0.3396.99 (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмрд┐рд▓реНрдб) (64-рдмрд┐рдЯ), рдиреЛрдб 9.6.1
рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рд╕рдВрд╕реНрдХрд░рдг: 2.1.1

@ 19smitgr idk 'рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЪреИрдЯреНрд╕' рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЬреЛ рд╡рд┐рд╖рдп рд╕реЗ рд╣рдЯрдХрд░ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╕рд╛рд░рдг рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм 'рдПрдХ рд╣реА рд╕реНрдХреНрд░реАрди рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдВрджреЗрд╢' рд╣реИред

@ kino2007 рдореИрдВ рдЪреИрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХреЗ рд╕рд╛рде websockets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ websocket рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЧрдпрд╛ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рдЧрдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд░ рдХреЛрдИ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдЪрд░рд┐рддреНрд░ рдХреЛ рдПрдХ рдирдИ рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рджреЗрдЧрд╛, рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ "рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ" рд╕рдВрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп "рдкрд░рд┐рд╡рд╣рди рдмрдВрдж" рд╕рдВрджреЗрд╢ рдорд┐рд▓ рд░рд╣рд╛ рдерд╛ред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рднрд▓реЗ рд╣реА рдореБрдЭреЗ "рдкрд░рд┐рд╡рд╣рди рдмрдВрдж" рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ, рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЕрдкрдиреА рд╕реВрдЪреА рд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ рдХрд┐ рдореБрдЭреЗ "рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ" рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛ред

рдпрд╣рд╛рдБ рд╡рд╣реА рддреНрд░реБрдЯрд┐

рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ backo2 рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рддрдм рдореИрдВрдиреЗ socket.io рдХреЗ рджреЗрд╡ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ Socket.prototype.onevent рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛:

рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛:

socket.on('ping', alert);

рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛:

socket.on('ping', msg => {
    alert(msg);
});

рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛!

рдореБрдЭреЗ рднреА рдпрд╣реА рддрдХрд▓реАрдлрд╝ рд╣реИред рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИред

рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдФрд░ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ-рдХреНрд▓рд╛рдЗрдВрдЯ: "^ 2.1.1"
рдореИрдХ рдУрдПрд╕
Google Chrome рдЕрдк рдЯреВ рдбреЗрдЯ рд╣реИ
рд╕рдВрд╕реНрдХрд░рдг 68.0.3440.106 (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмрд┐рд▓реНрдб) (64-рдмрд┐рдЯ)

рдореБрдЭреЗ рднреА рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рд╕рд╛рде рд╣реА, рдпрд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред

screen shot 2018-08-30 at 4 51 49 pm

рдореИрдХреЛрдЬрд╝: 10.13.6
Socket.io: "^ 2.1.1"
рдХреНрд░реЛрдо: 68.0.3440.106

@abhyuditjain рдЖрдк рдПрдХрд╛рдзрд┐рдХ рд╢реНрд░реЛрддрд╛ рдкрдВрдЬреАрдХрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ socket.removeAllListeners(); рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯрд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддрдд рдореБрджреНрджрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ рд╣реИред рдХрд┐рд╕реА рд╕реЗ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

@vkotu рдЕрдЧрд░ рдореИрдВ рд╕рднреА рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рд╕реЙрдХреЗрдЯ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЙрдкрд╛рдп?

рдмрд╕ websocket- рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
https://codeburst.io/why-you-don-t-need-socket-io-6848f1c871cd
https://medium.com/@martin.sikora/node -js-websocket-simple-chat-tutorial-2def3a841b61
https://www.npmjs.com/package/websocket

рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ, рдХреЗрд╡рд▓ рдорджрдж рдХрд░рдирд╛, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВ: рдбреАрдбреАрдбреА рдпрд╣ рдорд╣реАрдиреЛрдВ рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ 05.09.2018, 13:15, "рдЕрднреНрдпреБрджрд┐рдд рдЬреИрди" рдЕрдзрд┐рд╕реВрдЪрдирд╛рдПрдВ @github.com:@antoniab123456 рдпрд╣ рдкреГрд╖реНрда рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдореБрджреНрджреЛрдВ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рднрдВрдбрд╛рд░ред рдХреГрдкрдпрд╛ рдпрд╣рд╛рдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рди рдХрд░реЗрдВред

тАФрдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

- рд╕рд╛рднрд╛рд░, рдПрдВрдЯреЛрдирд┐рдпрд╛ рдмреА. рдХрд╕реНрдЯрдорд░ рдХреЗрдпрд░ рд╕реНрдкреЗрд╢рд▓рд┐рд╕реНрдЯ @amoCRM Global

рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ 2.0.3 "рдареАрдХ" рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@cozuya рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рддреЛ рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ!

рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ 2.0.3 "рдареАрдХ" рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЪрд╛рд▓рдмрд╛рдЬреА рдХрд░рддрд╛ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред 4 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВред рджреЗрдЦрддреЗ рд╣реИрдВ рдХрдм рддрдХ рд░рд╣рддрд╛ рд╣реИ!

@cozuya рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

2.1.1 . рдореЗрдВ рд╡рд╣реА рддреНрд░реБрдЯрд┐

рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 2.0.3 "рддрдп" рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ред

2.0.3 рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж @cozuya

2.1.1 рдЕрднреА рднреА рдЙрдиреНрд╣реАрдВ рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдкрд┐рдВрдЧ рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛

рдХреНрд░реЛрдо рдореЗрдВ v2.1.1 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИ (рд▓рдЧрднрдЧ 20-30 рдорд┐рдирдЯ)

2.1.1 рдЕрднреА рднреА рдЙрдиреНрд╣реАрдВ рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдкрд┐рдВрдЧ рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛

рд╡реА 2.0.3 . рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░реЗрдВ

рдореИрдВрдиреЗ 2.0.4 рдХреЗ рд╕рд╛рде socket.io рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП 60000 (v2.0.4) рд╕реЗ 5000 (v2.1.1) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдЖ рд╣реИред

рдЕрдЧрд░ рдореИрдВрдиреЗ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ 10000 рдХреА рддрд░рд╣ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЯреИрдм рдореЗрдВ рдХреБрдЫ рдереНрд░реЙрдЯрд▓ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рдереАред рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛?

рдореБрдЭреЗ рднреА рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рдХреНрд░реЛрдо рдФрд░ рд╕рдлрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛

рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред OSX рдХреЗ рддрд╣рдд рдХреНрд░реЛрдоред

рдореИрдВ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ socket.removeAllListeners(); рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди socket.off("whatever") рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реЗ рд╕рднреА рдЧреИрд░-рддрдХрдиреАрдХреА рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ "disconnect" рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИрдВ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИрдВред

рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдзреНрдпрд╛рди рдХреЗ рджреЗрдЦрдирд╛ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред рдЫрд╣ рдорд╣реАрдиреЗ рдФрд░ рдЧрд┐рдирддреА рд╣реЛ рд░рд╣реА рд╣реИред

рддреЛ рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдкрд┐рдВрдЧ рдЯрд╛рдЗрдо рдЖрдЙрдЯ рд╣реИред рдбрд╛рдЙрдирдЧреНрд░реЗрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред

рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╡реНрдпрд╛рдкрдХ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдлрд┐рд░ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛!

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрдЧрд╛!

рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

28 рдирд╡рдВрдмрд░, 2018 рдХреЛ рджреЛрдкрд╣рд░ 2:14 рдмрдЬреЗ, рд╣реЙрд░реНрд╕рдмреИрдбреЙрд░реНрдЯреАрдЬрд╝ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред OSX рдХреЗ рддрд╣рдд рдХреНрд░реЛрдоред

рдореИрдВ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рдЯрд╛рдПрдВ рдСрд▓ рд▓рд┐рд╕реНрдЯрд░реНрд╕ (); рд▓реЗрдХрд┐рди "рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ" рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реЗ рд╕рднреА рдЧреИрд░-рддрдХрдиреАрдХреА рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯ.рдСрдл ("рдЬреЛ рдХреБрдЫ рднреА")ред рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИрдВ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИрдВред

рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдзреНрдпрд╛рди рдХреЗ рджреЗрдЦрдирд╛ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред рдЫрд╣ рдорд╣реАрдиреЗ рдФрд░ рдЧрд┐рдирддреА рд╣реЛ рд░рд╣реА рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

рд╡рд╣реА рдореБрджреНрджрд╛ .... рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧрдирд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ ping timeout рдХреЗ рдХрд╛рд░рдг рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдмрд╛рдд рдкрд░ рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдиреЗ рдкрд┐рдВрдЧреНрд╕ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдХреНрдпреЛрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

io.on('connection', function(socket) {
  socket.on('disconnect', function(reason) {
  console.log(`Socket disconnected for: ${reason}`);
  }
});

https://socket.io/docs/server-api/#Event -%E2%80%98disconnect%E2%80%99 рдореЗрдВ рдбрд┐рд╕реНрдХрдиреЗрдХреНрд╢рди рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред

рдЕрдзрд┐рдХ рдбрд┐рдмрдЧрд┐рдВрдЧ:
image
рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ ping рдШрдЯрдирд╛ рдкрд┐рдЫрд▓реЗ рд╕реЗ +30s рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рджреЗрдЦрд╛, рддреЛ рдпрд╣ 30s+ рдерд╛ рдЬреЛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдЕрдВрддрд░рд╛рд▓ + рдкрд┐рдВрдЧ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИред +26s , +28s , рдФрд░ +29s рдмрд┐рдирд╛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХреЗ рджрд┐рдЦрд╛рдИ рджрд┐рдПред
рдЬрдм рд╕рдлрд╝рд╛рд░реА рд╕реЗ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдлрд╝рд╛рд░реА рдкреНрд░рддреНрдпреЗрдХ 25s рдХреЛ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдереА рдФрд░ рдЙрд╕реЗ рдХреЛрдИ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рдерд╛ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП 60000 (v2.0.4) рд╕реЗ 5000 (v2.1.0+) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬреЛ рдХреНрд░реЛрдо рдЬреИрд╕реЗ рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рдирд╡реАрдирддрдо v2.2.0 рд╕рд╣рд┐рдд v2.1.0+ рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрдбрд╝реЗ рдорд╛рди рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реИ:

const http = require('http');
const server = http.createServer();
const io = require('socket.io')(server, {
  pingTimeout: 60000,
});

рдпрд╛

const io = require('socket.io')();
const http = require('http');
const server = http.createServer();
io.attach(server, {
  pingTimeout: 60000,
});

5000 рдХреНрдпреЛрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ? рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рджреЗрд╡ рд╕рд░реНрд╡рд░ рдкрд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╡рд┐рд▓рдВрдмрддрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рд╕реАрдорд╛ рдХреЗ рдиреАрдЪреЗ рд╣реИред 5000ms рдПрдХ рдЙрдЪрд┐рдд рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдмрджрдмреВ рдЖ рд░рд╣реА рд╣реИ рдХрд┐ рдкрд┐рдВрдЧ-рдкреЛрдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╣реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Thx @getify (рдореИрдВ socket.io v2.2.0 рдкрд░ рд╣реВрдВ)

рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдЬреЛ рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдореБрдЭреЗ рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдорджрдж рдирд╣реАрдВ рдХрд░рддреА :-) рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рд╕рдорд░реНрдерди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдЕрдВрдЧреВрдареЗ рдХреЗ рд╕рд╛рде рд╡реЛрдЯ рджреЗрдВ

pingTimeout рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП Thx @omardoma рдФрд░ рдореИрдВ @LunarMist рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ ping/pong рдЗрд╡реЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдХреНрд░реЛрдо, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рд╕рдлрд╛рд░реА (рд╕рднреА рдореИрдХреЛрдЬрд╝ рдкрд░) рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред

рдХреНрд░реЛрдо рдФрд░ рд╕рдлрд╛рд░реА рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде ws рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдереНрд░реЙрдЯрд▓ рдХрд░рддреЗ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ:

  • рдХреНрд░реЛрдо, ~ 5 рдорд┐рдирдЯ рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдмрд╛рдж рдЬрдм рдЯреИрдм рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЬрдм рдЯреИрдм рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреНрд░реЛрдорд┐рдпрдо рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (https://developers.google.com/web/updates/2017/03/background_tabs)
  • рд╕рдлрд╛рд░реА, рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдЬрдм рдРрдк рдлреЛрдХрд╕ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдк (рдореИрдХреЛрдЬрд╝) рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЬрдм рдЯреИрдм рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред #2924 . рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд
  • рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, *рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХрднреА рднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдмрддрд╛рдИ рдЧрдИ рд╣реИ

рд╕рдорд╛рдзрд╛рди

рдореИрдВрдиреЗ рдЗрди рд╕рднреА 3 рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдШрдВрдЯреЛрдВ рддрдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, pingTimeout рдФрд░ pingInterval рдорд╛рдиреЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдореБрдЭреЗ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рдорд┐рд▓рд╛:

  1. pingTimeout >= 30000 рдПрдордПрд╕ . рд╕реЗрдЯ рдХрд░рдирд╛

    • рдпрд╛ -

  2. pingInterval <= 10000 рдПрдордПрд╕ . рд╕реЗрдЯ рдХрд░рдирд╛

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ pingTimeout = 30000 рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ pingInterval 25000 ms рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ 10s рддрдХ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдЖрд╡реГрддреНрддрд┐ рдмрдврд╝рд╛рдирд╛ _at scale_ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рддреВрдиреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рдХреНрдпрд╛ @darrachequesne рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд░реЗрдкреЛ рд╕рджрд╕реНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ pingTimeout рдХреЛ 30000 5000 ms рдХреЗ рдореМрдЬреВрджрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗ рдмрдврд╝рд╛рдХрд░ pingTimeout рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реИрдВ рдЬрд┐рд╕реЗ v2.1 рдореЗрдВ 60000 рд╕реЗ рдмрджрд▓рд╛ рдЧрдпрд╛ рдерд╛

рдЖрдкрдХреА рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдирд╛ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ рди рдХрд┐ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pingTimeout рдХреЛ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдареАрдХ рд╣реЛ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо v3 рдореЗрдВ рд╕рд░реНрд╡рд░ -> рдХреНрд▓рд╛рдЗрдВрдЯ (рд╡рд░реНрддрдорд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ -> рд╕рд░реНрд╡рд░ рдХреЗ рдмрдЬрд╛рдп) рд╕реЗ рдкрд┐рдВрдЧ/рдкреЛрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдВрдб рдкрд░ рдмрд╕ рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

_socket.on('рдкрд┐рдВрдЧ', () => {
рд╕реЙрдХреЗрдЯ.рдПрдорд┐рдЯ (рдбреЗрдЯрд╛);
});_

рдзрдиреНрдпрд╡рд╛рдж @ рдХреНрд░реЛрдмрд┐рдиреНрд╕рди42! рдкрд┐рдВрдЧ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдХрд┐рд╕реА рднреА рдХреНрд╖рдг рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдИрд╡реЗрдВрдЯ рдХреЛ рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдореЗрдВ 30 рд╕реЗрдХрдВрдб рддрдХ рдХрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдФрд░ рдХреБрдЫ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреИрдЯ рдРрдк рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд┐рдВрдЧ рдЕрдВрддрд░рд╛рд▓ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдХрд╛рдо рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, рд▓рд╛рдЧрдд рдЕрдзрд┐рдХ рд╣реИ, рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рддрдп рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдиреАрдЪреЗ рд╣реИрдВ:

"socket.io": "2.2.0",
"socket.io-adapter": "~1.1.1",
"socket.io-client": "2.2.0",
"socket.io-parser": "~3.2.0",
"socket.io-redis": "^5.2.0",

рдореЗрд░рд╛ рдХреЛрдб:
рд╕рд░реНрд╡рд░, {
рдкрде: '/socket.io',
рд╕реЗрд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ: рд╕рдЪ,
// рдиреАрдЪреЗ рдЗрдВрдЬрди рд╣реИрдВред рдЖрдИрдУ рд╡рд┐рдХрд▓реНрдк
рдкрд┐рдВрдЧрдЗрдВрдЯрд░рд╡рд▓: 40000,
рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ: 25000,
рдЕрдкрдЧреНрд░реЗрдбрдЯрд╛рдЗрдордЖрдЙрдЯ: 30000, // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 10000ms рд╣реИ, рдЗрд╕реЗ 20k рдпрд╛ рдЕрдзрд┐рдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
рдПрдЬреЗрдВрдЯ: рдЭреВрдард╛,
рдХреБрдХреА: рдЭреВрдард╛,
рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЕрдирдзрд┐рдХреГрдд: рдЭреВрдард╛,
рдкреБрди: рд╕рдВрдпреЛрдЬрдирд╡рд┐рд▓рдВрдм: 1000,
рдкреБрди: рдХрдиреЗрдХреНрд╢рдиDelayMax: 5000
}

рдореЗрд░реЗ рдореБрд╡рдХреНрдХрд┐рд▓:

рдкреБрди: рдХрдиреЗрдХреНрд╢рди: рд╕рдЪ,
рдкреБрди: рд╕рдВрдпреЛрдЬрдирд╡рд┐рд▓рдВрдм: 1000,
рдкреБрди: рдХрдиреЗрдХреНрд╢рдиDelayMax: 5000,
рдкреБрди: рд╕рдВрдпреЛрдЬрди рдкреНрд░рдпрд╛рд╕: рдЕрдирдВрдд,
// рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреЗ рд╡рд┐рдХрд▓реНрдк
рдкрд░рд┐рд╡рд╣рди: ["рдорддрджрд╛рди", "рд╡реЗрдмрд╕реЛрдХреЗрдЯ"],
рд╕реБрд░рдХреНрд╖рд┐рдд: рд╕рдЪ,
рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЕрдирдзрд┐рдХреГрдд: рдЭреВрдард╛,
рдмрд▓рдирдИ: рд╕рдЪ,
рд╕рдордп рд╕рдорд╛рдкреНрдд: 60000

рд╣реИрд▓реЛ рдлреИрдЬрд╛рди,
рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ -
** рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╕рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ ..

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб - рдХреЛрдб:

рдХреЙрдиреНрд╕реНрдЯ рд╕рд░реНрд╡рд░ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('http')ред createServer ();
const io = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рд╕реЙрдХреЗрдЯ.io') (рд╕рд░реНрд╡рд░, {
// рдкрде: '/socket.io',
рд╕реЗрд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ: рд╕рдЪ,

pingInterval: 40000,
pingTimeout: 25000,
upgradeTimeout: 21000, // default value is 10000ms, try changing it to 20k or more
agent: false,
cookie: false,
rejectUnauthorized: false,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000

});

io.on ('рдХрдиреЗрдХреНрд╢рди', рдлрд╝рдВрдХреНрд╢рди (рд╕реЙрдХреЗрдЯ) {
рд╕реЙрдХреЗрдЯ.рдПрдорд┐рдЯ ('рд╕реНрд╡рд╛рдЧрдд', {рд╕рдВрджреЗрд╢: 'рд╕реНрд╡рд╛рдЧрдд!', рдЖрдИрдбреА: рд╕реЙрдХреЗрдЯ.рдЖрдИрдбреА});
рд╕реЙрдХреЗрдЯ.рдСрди ('рд╕реБрдиреАрд▓', рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ);
});

рд╕рд░реНрд╡рд░ред рд╕реБрдиреЛ (3000);

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдХреЛрдб:

var рдХреНрд▓рд╛рдЗрдВрдЯ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ-рдХреНрд▓рд╛рдЗрдВрдЯ");
рд╡рд░ рд╕реЙрдХреЗрдЯ = рдХреНрд▓рд╛рдЗрдВрдЯ.рдХрдиреЗрдХреНрдЯ ("http://localhost:3000", {
рдкреБрди: рдХрдиреЗрдХреНрд╢рди: рд╕рдЪ,
рдкреБрди: рд╕рдВрдпреЛрдЬрдирд╡рд┐рд▓рдВрдм: 1000,
рдкреБрди: рдХрдиреЗрдХреНрд╢рдиDelayMax: 5000,
рдкреБрди: рд╕рдВрдпреЛрдЬрди рдкреНрд░рдпрд╛рд╕: рдЕрдирдВрдд,
рдкрд░рд┐рд╡рд╣рди: ["рд╡реЗрдмрд╕реЛрдХреЗрдЯ"],
рд╕реБрд░рдХреНрд╖рд┐рдд: рдЭреВрдард╛,
рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЕрдирдзрд┐рдХреГрдд: рдЭреВрдард╛,
рдмрд▓рдирдИ: рд╕рдЪ,
рд╕рдордп рд╕рдорд╛рдкреНрдд: 6000
});

рд╕реЙрдХреЗрдЯ.рдХрдиреЗрдХреНрдЯ ();
рд╕реЙрдХреЗрдЯ.рдПрдорд┐рдЯ ('рд╕реБрдиреАрд▓', {
рдбреЗрдЯрд╛: 'рд╣реИрд▓реЛ'
});
рд╕реЙрдХреЗрдЯ.рдСрди ('рд╕реНрд╡рд╛рдЧрдд', рдлрд╝рдВрдХреНрд╢рди (рдбреЗрдЯрд╛) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдбреЗрдЯрд╛)
рд╕реЙрдХреЗрдЯ.рдПрдорд┐рдЯ ('рд╕реБрдиреАрд▓', {
рдбреЗрдЯрд╛: 'рдлреИрдЬрд╛рди',
рдЖрдИрдбреА: data.id
});

socket.disconnect();

});

рд╕рд╛рджрд░
рд╕реБрдиреАрд▓ рдпрд╛рджрд╡

09-рдордИ-2019 рдХреЛ рд╢рд╛рдо 4:05 рдмрдЬреЗ рдлреИрдЬрд╛рди рдЬрд╛рд╣рд┐рдж рдиреЗ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдкрд░ рд▓рд┐рдЦрд╛:

рдкреБрди: рдХрдиреЗрдХреНрд╢рди: рд╕рдЪ,
рдкреБрди: рд╕рдВрдпреЛрдЬрдирд╡рд┐рд▓рдВрдм: 1000,
рдкреБрди: рдХрдиреЗрдХреНрд╢рдиDelayMax: 5000,
рдкреБрди: рд╕рдВрдпреЛрдЬрди рдкреНрд░рдпрд╛рд╕: рдЕрдирдВрдд,
// рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреЗ рд╡рд┐рдХрд▓реНрдк
рдкрд░рд┐рд╡рд╣рди: ["рдорддрджрд╛рди", "рд╡реЗрдмрд╕реЛрдХреЗрдЯ"],
рд╕реБрд░рдХреНрд╖рд┐рдд: рд╕рдЪ,
рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЕрдирдзрд┐рдХреГрдд: рдЭреВрдард╛,
рдмрд▓рдирдИ: рд╕рдЪ,
рд╕рдордп рд╕рдорд╛рдкреНрдд: 60000

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдареАрдХ рд╣реЛрдиреЗ рддрдХ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдореЛрд░реА рдХреЛ рдЦрд╛рд▓реА рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ рдФрд░ рдореЗрдореЛрд░реА рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

  • рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИ, https://apple.stackexchange.com/questions/344183/safari-12-mac-does-includeinternaldebugmenu-1-still-work , рдкрд╣рд▓реЗ рдЯрд░реНрдорд┐рдирд▓ рдРрдк рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреВрд░реНрдг рдбрд┐рд╕реНрдХ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред
  • рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓реЗрдВ, рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ defaults write com.apple.Safari IncludeInternalDebugMenu 1 . рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ
  • рд╕рдлрд╛рд░реА рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдЖрдкрдХреЛ рджрд╛рдИрдВ рдУрд░ рдПрдХ рдирдпрд╛ рдбреАрдмрдЧ рдореЗрдиреВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
  • рдбрд┐рдмрдЧ-> рд╡рд┐рд╡рд┐рдз рдЭрдВрдбреЗ рдХреЗ рддрд╣рдд, рджреЛ рдЭрдВрдбреЗ "рдРрдк рдиреИрдк рдЕрдХреНрд╖рдо рдХрд░реЗрдВ" рдФрд░ "рд╣рд┐рдбрди рдкреЗрдЬ рдЯрд╛рдЗрдорд░ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ" рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рд╕рдлрд╛рд░реА рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреНрд░реЛрдо рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ, рддреЛ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА

рдЖрдк рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╡реЗрдмрджреЗрд╡ рдХреЗ рд▓рд┐рдП рд╕рдлрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВ

рдЖрдк рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╡реЗрдмрджреЗрд╡ рдХреЗ рд▓рд┐рдП рд╕рдлрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рдРрдк рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реИред рдпрд╣ 3.0 рдореЗрдВ рддрдп рд╣реЛрдиреЗ рддрдХ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреЗрд╡ рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдореИрдВ рд░реАрдпрд▓рдЯрд╛рдЗрдо рдСрдлрд╝рд▓рд╛рдЗрди рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдкрд┐рдВрдЧрдЗрдВрдЯрд░рд╡рд▓ рдФрд░ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕реЗ 30 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░рд╛ рдкреНрд░рд╡рд╛рд╣ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ ... рдЯреИрдм?

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдореИрдВ рд░реАрдпрд▓рдЯрд╛рдЗрдо рдСрдлрд╝рд▓рд╛рдЗрди рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдкрд┐рдВрдЧрдЗрдВрдЯрд░рд╡рд▓ рдФрд░ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕реЗ 30 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░рд╛ рдкреНрд░рд╡рд╛рд╣ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ ... рдЯреИрдм?

рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕реЙрдХреЗрдЯ рдкрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдИрд╡реЗрдВрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рд╕реЙрдХреЗрдЯ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдвреВрдВрдвреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдореЗрдВ рдСрдлрд╝рд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ

рдпрд╣рд╛рдБ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рдЪреВрдХ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ 25 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдкрд┐рдВрдЧ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдВрдЧ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 5 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред

рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ | 5000 | рдПрдХ рдкреЛрдВрдЧ рдкреИрдХреЗрдЯ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рддрдиреЗ рдПрдордПрд╕ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
-- | -- | --
рдкрд┐рдВрдЧрдЗрдВрдЯрд░рд╡рд▓ | 25000 | рдПрдХ рдирдпрд╛ рдкрд┐рдВрдЧ рдкреИрдХреЗрдЯ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рддрдиреЗ рдПрдордПрд╕?

рдореИрдВрдиреЗ рдЗрд╕реА рддреНрд░реБрдЯрд┐ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд╡рд░рд┐рдд рд▓реЗрдЦрди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдпрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рд╣реИред

рдореЗрд░рд╛ рдкрд░рд┐рджреГрд╢реНрдп рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрдо рдкрд░ рдерд╛ рдЬрд╣рд╛рдВ рд╕реНрдХреНрд░реАрди рд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрдиреЗрдХреНрд╢рди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдореИрдВ рдХреНрд╡реЗрд░реА рд╡рд┐рдХрд▓реНрдк рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдиреЗрдХреНрдЯ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рднреЗрдЬрддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдЯреЛрдХрди рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ:

// client
io('myAppUrl', {
  query: {
    token: localStorage.getItem('myKey') || ''
  }
});

io.on('reconnect_attempt', () => {
  io.opts.query = {
    token: localStorage.getItem('myKey') || ''
  };
});

io.on('my_custom_connection_successful_event', (token) => {
  localStorage.setItem('myKey', token);
});

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрдо рд╕рд░реНрд╡рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЛрдХрди рднреЗрдЬ рджреЗрдЧрд╛ред рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ 'reconnect_attempt' рд╢реНрд░реЛрддрд╛ рдЬреЛрдбрд╝рд╛ рдерд╛ рдЬреЛ $ localStorage рд╕реЗ рдирд╡реАрдирддрдо рдЯреЛрдХрди рд╕реЗрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдХрдВрд╕реЛрд▓ рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдИрд╡реЗрдВрдЯ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ 'reconnect_attempt' рдИрд╡реЗрдВрдЯ рдХреЛ рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рдо рдорд┐рд▓рддрд╛ рд╣реИ:

  • рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ (рдХрд╛рд░рдг: 'рдкрд░рд┐рд╡рд╣рди рдмрдВрдж')
  • рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ (рдкреНрд░рдпрд╛рд╕: 1)
  • рдкреБрдирдГ рдХрдиреЗрдХреНрдЯ
  • рдкрд┐рдВрдЧ/рдкреЛрдВрдЧ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ

рддреЛ рдХреЛрдИ 'reconnect_attempt' рдШрдЯрдирд╛ рдХреЛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреЛрдХрди рдЕрднреА рднреА рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрдпреЛрдВ рд╣реИ (рдХрдиреЗрдХреНрдЯ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рд╕реЗрдЯ)ред

рд▓рдВрдмреА рдХрд╣рд╛рдиреА рдЫреЛрдЯреА, рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рдХрд╕реНрдЯрдо "рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓" рдИрд╡реЗрдВрдЯ рдкрд░ io.opts.query рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рддреБрд░рдВрдд рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдирдП рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:

// client
io('myAppUrl', {
  query: {
    token: localStorage.getItem('myKey') || ''
  }
});

io.on('my_custom_connection_successful_event', (token) => {
  localStorage.setItem('myKey', token);
  io.opts.query = {
    token: token
  };
});

рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ io.opts.query рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдиреЗрдХреНрдЯ рдФрд░ рдмрд╛рдж рдХреЗ рд╕рднреА рдкреБрди: рдХрдиреЗрдХреНрдЯ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдХрд┐рд╕реА рдкреБрди: рдХрдиреЗрдХреНрдЯ-рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдХреНрд╡реЗрд░реА рд╡рд┐рдХрд▓реНрдк рдбреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЧреБрдорд░рд╛рд╣ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛? рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рддреЛ 'reconnect_attempt' рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрдЬрд╛рдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпрд╣ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ io.opts.query рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рдорд╛рди рдмрд╛рдж рдХреЗ рд╕рднреА рдкреБрди: рдХрдиреЗрдХреНрдЯ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЬрдм рднреА рдЖрдк рдЯреЛрдХрди рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 'refresh_token' рдХрд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рдкрд░ рднреАред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░реА рдЧрд▓рддреА рдпрд╣ рдереА рдХрд┐ 'reconnect_attempt' рд╢реНрд░реЛрддрд╛ рдХреЛ рдореЗрд░реЗ рдХреЛрдб рдХреЗ рджреВрд╕рд░реЗ рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛... :man_facepalming: рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓реЙрдЧрд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рддреЛ рд╣рд╛рдБ, рдореЗрд░реЗ рдкреБрди: рдХрдиреЗрдХреНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ:

  • рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ (рдХрд╛рд░рдг: 'рдкрд░рд┐рд╡рд╣рди рдмрдВрдж')
  • reconnect_attempt (рдкреНрд░рдпрд╛рд╕: 1)
  • рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ (рдкреНрд░рдпрд╛рд╕: 1)
  • рдкреБрдирдГ рдХрдиреЗрдХреНрдЯ
  • рдкрд┐рдВрдЧ/рдкреЛрдВрдЧ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ

рдлрд┐рд░ рднреА, рдореЗрд░рд╛ рдпрд╣ рдЕрд╣рд╕рд╛рд╕ рдХрд┐ io.opts.query рдХреЛ рдЬрдм рдЪрд╛рд╣реЗрдВ рддрдм рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИред :рдкрд╕реАрдирд╛_рдореБрд╕реНрдХреБрд░рд╛рдирд╛:

рдХреНрдпрд╛ рдЕрднреА рднреА рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдирд╛ рдареАрдХ рд╣реИ? рдореИрдВ 2.0.3 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╣реИрд▓реЛ, рдореБрдЭреЗ рдПрдХ рд╣реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рджреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдореИрдВрдиреЗ @omardoma рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдХреНрдпрд╛ рдХреЛрдИ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдУрдПрд╕ - рдЙрдмрдВрдЯреВ 18.04
рдиреЛрдб - 12.16.2
рдПрдирдкреАрдПрдо - 6.14.5
рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ - 2.3.0
рдореЗрд░рд╛ рдХреЛрдб -

app.js

const speech = require('@google-cloud/speech');
const speechClient = new speech.SpeechClient(); // Creates a client
const environmentVars = require('dotenv').config();
const io = require('socket.io')();
const http = require('http');
const server = http.createServer();
io.attach(server, {
  pingTimeout: 60000,
});



console.log(io)



// =========================== SOCKET.IO ================================ //

io.on('connection', function (client) {
  console.log('Client Connected to server');
  let recognizeStream = null;

рдИрдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js" integrity="sha256-bQmrZe4yPnQrLTY+1gYylfNMBuGfnT/HKsCGX+9Xuqo=" crossorigin="anonymous"></script>
<script src="/js/client.js"></script>

рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓

const socket = io.connect("http://localhost:8080");

рдореИрдВ socket.io рд╕рдВрд╕реНрдХрд░рдг 2.3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЬрдм рдореЗрд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ UI рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрд▓рд░реНрдЯ (рдЬреЛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ) рд╣реИ рдФрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 30 рд╕реЗрдХрдВрдб (рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ + рдкрд┐рдВрдЧрдЗрдВрдЯрд░рд╡рд▓) рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рд░реНрдЯ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ 'рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдж рдпрд╛ рдмрдВрдж рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ' рд╕рдВрджреЗрд╢ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдШрдЯрдирд╛ рдХреЛ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛рд░рдг рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдпреВрдЖрдИ рдХреЗ рдкрд╛рд╕ рдЕрд▓рд░реНрдЯ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПред рдЕрдЧрд░ рдореИрдВ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ 10 рдорд┐рдирдЯ рддрдХ рдмрдврд╝рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ 10 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рдкрдврд╝рд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ (рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 10 рдорд┐рдирдЯ рддрдХ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЧрдпрд╛ рдерд╛)ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЕрдЧрд░ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд░реБрдХрд╛рд╡рдЯ рдЖрджрд┐ рдЖрддреА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреНрд▓реЛрдЬ рдХрд╛рд░рдг рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдХреНрдпрд╛ рдЗрд╕ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ+рдкрд┐рдВрдЧрдЗрдВрдЯрд░рд╡рд▓ рдХреЛ рдмрдврд╝рд╛рдирд╛ рдареАрдХ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬрдм рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ? рдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

stnwk picture stnwk  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gCurtisCT picture gCurtisCT  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MyMomSaysIAmSpecial picture MyMomSaysIAmSpecial  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rudijs picture rudijs  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

adammw picture adammw  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ