2014年11月10日月曜日

Node.jsとSoket.ioとSilverlight(1)

 Silverlightでのリアル通信を行うのに、「Node.js+Soket.io+JavaScript+Silverlight」を組み合わせて
行わなければなりません。
そこで、実現する為に、調べた内容を記録として、記載していきます。

●Node.jsとは?
JavaScriptはユーザーのブラウザで動作するプログラミング言語ですが、Node.jsはサーバー側用のJavaScriptです。
JavaScriptのシングルスレッドをサーバ側で使う事で、リアルタイム通信を実現いたします。
Node.jsでは、WebSoketのラッパーのSocket.ioというリアルタイムな通信を実現するライブラリを扱うことができます。

詳しくは、次のURLを参照ください。
http://gihyo.jp/dev/serial/01/nodejs/0001
http://mdlab.jp/project/node_js/01.html
http://www.atmarkit.co.jp/ait/articles/1102/28/news105.html

記事の内容をまとめますと、
Node.jsはシングルスレッドベースの非同期処理となる
・ノンブロッキングI/O
 データの送受信(I/O)が完了を待たず(ブロックせず)に、次の処理をうけつけ、それぞれを並列に実行する
・イベントループ
 スレッドを1個しかもたないイベントループです。1つしかスレッドを持たないので、メモリ消費量を劇的に抑えている。
 そのため、「C10K問題」とよばれている「アクセスするクライアント数が1万を超えると、サーバーのスレッド(並列処理の単位)数が増えすぎて、サーバーのメモリーなどのリソースが不足してしまうという問題」が起きない。
http://tech-public.blogspot.jp/2012/12/nodejsc10k.html 

最近サーバがパンクする報告がよく来ますが、C10K問題であるようだ。
設計と実装はずれがあるので、サーバ1個だと、どのくらいのユーザが使っているのかはわかりませんが、1万ユーザの可能性があるアプリだと、すぐパンクするような気がします。

Node.jsの仕組みに関しては、
http://itpro.nikkeibp.co.jp/article/COLUMN/20120725/411441/
に記載敷いてる下記内容が イメージしやすい。
スターバックスの接客方式をイメージすると分かりやすい。客はレジで注文と支払いを済ませると、配膳口近くで注文した飲み物ができるのを待つ。飲み物ができたかどうかに関係なく、レジでは次々と注文を受け付ける。配膳口では、できた順に商品を客に渡す。このため昼時に多数の来客があっても、レジ前の行列はできにくい。 

●問題点?
ただし、Node.jsもいろいろ問題がありそうなので、諸手を上げて使用するレベルなのか、実際つかってみないと分からないようだ。
http://www.anlyznews.com/2011/02/nodejs.html 

この中で、以下2点 が少し気になりました。
イベントループ・モデルで処理を直列化しているので、あるリクエストの処理に時間がかかる場合、他の全てのリクエストをブロックする可能性がある。
・あるページを表示するためのサーバー側のJavaScriptの文法エラーが、サーバーの停止を引き起こす。簡単なプログラム・ミスが、アプリケーションの非クリティカルな部分に発生したとしても、システム全体がダウンする結果となる。

 時々、訳分からずエラーなるときがあるが、これって、サーバ側のJavaScriptの文法エラーといったことはないだろうか?。

これから、実際に使ってみて、問題点を見つけていこうと思います。

0 件のコメント:

コメントを投稿