読者です 読者をやめる 読者になる 読者になる

"Diary" インターネットさんへの恩返し

いつもソースコードコピペばかりなので,みなさまへ少しばかりの恩返しを

socket.ioで約1分間隔毎にconnect/disconnectが繰り返される



スポンサーリンク

socket.ioでいろいろやっているけど、ローカル環境で動く分には問題ないが、サーバで動かした際に1分~2分毎に、connectとdisconnectが繰り返され、その間、socket通信ができない状態になっている。とりあえずなんとか動く状況にはなったので記録。

試したこと1 アイドル時間の可能性(結果☓)

ユーザがオペレーションをしない状態が続くと勝手にアイドルになると想定し2秒毎にクライアントとサーバ間で疎通を行うよう組んだ。(
node.js - NodeJS + Socket.io connections dropping/reconnecting? - Stack Overflow

しかし、結局1分程度経つとping/pongが途中で止まりこれが原因ではないみたい。(ローカルでは起きないから関係ないよな、そもそも)

function sendHeartbeat(){
    setTimeout(sendHeartbeat, 2000);
    io.sockets.emit('ping', { beat : 1 });
}

io-connections-dropping-reconnecting
setTimeout(sendHeartbeat, 2000);

試したこと2 パラメータをいじった(結果○)

タイムアウト系のパラメータをapp.jsに指定した。(なんか怪しい)

io.set('close timeout', 3);


とりえあず、console.logでsocketの中身を見るとこんな感じになっていた。こちらを参照していろいろパラメータの意味とか調べないと。
https://github.com/Automattic/socket.io/wiki/Configuring-Socket.IOAutomattic/socket.io · GitHub

{ id: 'yIhQgIj8g8wlagmYYBtk',
  namespace:
   { manager:
      { server: [Object],
        namespaces: [Object],
        sockets: [Circular],
        _events: [Object],
        settings: [Object],
        handshaken: [Object],
        connected: [Object],
        open: [Object],
        closed: [Object],
        rooms: [Object],
        roomClients: [Object],
        oldListeners: [Object],
        sequenceNumber: 1264589668,
        gc: [Object] },
     name: '',
     sockets:
      { Xmm7ECeDRktwqqHUYBtj: [Object],
        yIhQgIj8g8wlagmYYBtk: [Circular] },
     auth: false,
     flags: { endpoint: '', exceptions: [] },
     _events: { connection: [Object] } },
  manager:
   { server:
      { domain: null,
        _events: [Object],
        _maxListeners: 10,
        _connections: 11,
        connections: [Getter/Setter],
        _handle: [Object],
        _usingSlaves: false,
        _slaves: [],
        allowHalfOpen: true,
        httpAllowHalfOpen: false,
        timeout: 120000,
        _connectionKey: '4:0.0.0.0:3000' },
     namespaces: { '': [Object] },
     sockets:
      { manager: [Circular],
        name: '',
        sockets: [Object],
        auth: false,
        flags: [Object],
        _events: [Object] },
     _events:
      { 'set:transports': [Object],
        'set:store': [Function],
        'set:origins': [Function],
        'set:flash policy port': [Function],
        'set:flash policy server': [Function] },
     settings:
      { origins: '*:*',
        log: true,
        store: [Object],
        logger: [Object],
        static: [Object],
        heartbeats: true,
        resource: '/socket.io',
        transports: [Object],
        authorization: false,
        blacklist: [Object],
        'log level': 3,
        'log colors': true,
        'close timeout': 60,
        'heartbeat interval': 25,
        'heartbeat timeout': 60,
        'polling duration': 20,
        'flash policy server': true,
        'flash policy port': 10843,
        'destroy upgrade': true,
        'destroy buffer size': 100000000,
        'browser client': true,
        'browser client cache': true,
        'browser client minification': false,
        'browser client etag': false,
        'browser client expires': 315360000,
        'browser client gzip': false,
        'browser client handler': false,
        'client store expiration': 15,
        'match origin protocol': false },
     handshaken:
      { Xmm7ECeDRktwqqHUYBtj: [Object],
        yIhQgIj8g8wlagmYYBtk: [Object] },
     connected: { Xmm7ECeDRktwqqHUYBtj: true, yIhQgIj8g8wlagmYYBtk: true },
     open: { Xmm7ECeDRktwqqHUYBtj: true },
     closed: { Xmm7ECeDRktwqqHUYBtj: [], yIhQgIj8g8wlagmYYBtk: [] },
     rooms: { '': [Object] },
     roomClients:
      { Xmm7ECeDRktwqqHUYBtj: [Object],
        yIhQgIj8g8wlagmYYBtk: [Object] },
     oldListeners: [ [Object] ],
     sequenceNumber: 1264589668,
     gc:
      { _idleTimeout: 10000,
        _idlePrev: [Object],
        _idleNext: [Object],
        _idleStart: 1401423953340,
        _onTimeout: [Function: wrapper],
        _repeat: true } },
  disconnected: false,
  ackPackets: 0,
  acks: {},
  flags: { endpoint: '', room: '' },
  readable: true,
  store:
   { store: { options: undefined, clients: [Object], manager: [Object] },
     id: 'yIhQgIj8g8wlagmYYBtk',
     data: {} },
  _events: { error: [Function] } }