メニューを閉じる

テクノデジタルグループ

メニューを開く

2018.02.22

プログラミング

socket.io-ruby-emitterでsocket.ioサーバーが落ちるならpackageをバージョンアップ

坂東です。

先日、こういう記事を書いたばかりなんですが、

マルチスレッドなSocket.ioでのRedis pub/subはsocket.io-emmiterを使おう

nodejsで稼働させてるsocket.ioサーバー側が落ちます。
確実に落ちるんじゃなく、emitを実行するときの

emmiter.to( 'チャンネルA' ).emit('イベント1', 'メッセージ')

この「メッセージ」が一定の長さ以上になったときに、こんなエラーを吐いてnodejsが落ちてる。

/node_modules/msgpack-js/msgpack.js:200
  if (decoder.offset !== buffer.length) throw new Error((buffer.length - decoder.offset) + " trailing bytes");
                                        ^
Error: -930816533 trailing bytes
    at Object.decode (/node_modules/msgpack-js/msgpack.js:200:47)
    at Redis.onmessage (/node_modules/socket.io-redis/index.js:93:24)
    at emitTwo (events.js:100:13)
    at RedisClient.emit (events.js:185:7)
・・・・

 

とりあえず「msgpack-js/msgpack.js:200」でググると英語で同様の事例がでてきます。
つたなく訳してみると「return_buffres:trueを指定しろ」「うちはうまくいっている」「socket.io-redisとredisのバージョンが合ってないんじゃない」というアドバイスはあるけれども、質問者が解決に至っていない感じ。
日本語ソースがない、解決していない、ということは環境依存のレアケースなんです。

 

該当のnodejs環境は2年以上前につくったのでsocket.io周りのpackage.jsonが古い。

    "socket.io": "1.3.7",
    "socket.io-redis": "1.0.0",
    "redis": "2.4.2",

 

socket.ioはv2が出てるけれど下位互換が無いそうなのでv1の最新版に変える。

    "socket.io": "1.7.4",
    "socket.io-redis": "4.0.1",
    "redis": "2.8.0",

 

そしたら同様のエラーは出なくなりました。

「redisとsocket.io-redisのバージョンが合っていない」が正解だったんでしょうね。
それかsocket.io-ruby-emitterとの相違かな。
ちなRedisは3.2.X。

nodejsはバージョン上げたら「たまに落ちる」「メモリがぎゅんぎゅん減る」ことが何度か有りトラウマなのであまりアップデートしたくないんですよね。
もう少し様子見してから本番適用しようと思います。

おわり。


【記事への感想募集中!】

記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!
  • こんな記事が読んでみたい、こんなことが知りたい、調べてほしい!という意見も募集中!
  • いただいた感想は今後の記事に活かしたいと思います!

感想フォームはこちら


【テクノデジタルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事