ラベル

2012年12月22日土曜日

WebSocketの使い方

自部門内の管理用でイントラのWebを作り、管理してますが
特定のページにアクセスが集中していて重くなっています。
理由は表示データの更新の為です。

以前からWebSocketを使うとリアルな通信が出来そうだな~
とは思っていたのですが、なにせ素人ですから、出来るかどうか
Googleで検索しながらサンプルを調べていました。

ここで学んだ内容を整理しておきます。
あくまでも自分で理解した内容のメモですから
間違った事を書いてたらご容赦を。

1、nodejs
WebSocktのサーバーは色々と出ていますのでどれが良いのか?
で自分が必要な機能と経験とを考えつつ(悩みつつ)試したのが
nodejs です。

意外にも簡単に動作しました。

動いたけど理解には及ばず、Googleでまた調べ直し

⇒ Nodeビギナーズブック

これを見ました。(買ってはいませんが)

どう見ても、本のコマーシャル?(Goolgleの検索で何度も見かけてました)

と思いつつ、下へスクロールしてみると(結構長いページです)

解説が始まりました。(~~)


これ見ながら半日、サンプルを動作させて、nodejsに対する頭のモヤモヤが
スッキリしてきました。


このサンプルは多分、Linux環境で書かれているのと、1箇所だけサンプルを保存する
ファイル名が抜けてました。
記述の前後関係で気がつきますが、メモしときます。


以下のサンプルソースを保存する時 requestHandlers.js です。

「本当のリクエストハンドラへのルーティング

さて、仕事に戻るとしましょう。HTTPサーバとリクエストルータは、・・・・・
・・・・・・・モジュールのメソッドとしてエクスポートしましょう:


function start() {
console.log("Request handler 'start' was called.");
}

function upload() {
console.log("Request handler 'upload' was called.");
}

exports.start = start;
exports.upload = upload;


こうして、ルータにルーティングする先のものを渡すことで・・・・」


更に下へ行くと(ページの真ん中より少し下)以下のサンプル(「」で括った)で

exec("ls -lah",   ここの ls が linux の記述ですね。
私はWindowsしか使ってないので dir とか tree を入れて試しました。


exec("dir", function (error, stdout, stderr) {
content = stdout;
});



「もう一度startリクエストハンドラを使います。 下記を反映するよう、修正して下さい

(requestHandlers.jsファイル):


var exec = require("child_process").exec;

function start() {
console.log("Request handler 'start' was called.");
var content = "empty";

exec("ls -lah", function (error, stdout, stderr) {
content = stdout;
});

return content;
}

function upload() {
console.log("Request handler 'upload' was called.");
return "Hello Upload";
}

exports.start = start;
exports.upload = upload;


おわかりのとおり、新しいNode.jsモジュールchild_processを使っています。」


以上。


この他に

PHPでWebSocketサーバー作ってみた



[Windows]node.js(0.8)+express(3.0)+ejs+socket.ioを使ったサンプルアプリを動かすまでのメモ

☆このサンプルでIE-8も socket-io 経由で接続されます。


が凄く参考になりましたのでメモで残します。

0 件のコメント:

コメントを投稿