2024.11.14
いまさらNode.jsを知ろう~環境構築も~
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つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索