./configure

make

make install

 

./configure で以下が出た

PAM enabled but headers or library not found

以下で回避

yum install pam-devel

http://qiita.com/takoba/items/0b50f6f33d7c44a85bef

 

cp system/startup/rc.monit /etc/init.d/monit

chmod a+x /etc/init.d/monit

MONIT=/usr/local/bin/monit

 

cp monitrc /etc/.

jsdoc3、yuidoc, esdocを試した三田

jsdoc3がシンプル。UIが貧弱

yuidocは、UIはいいけど、@method の追加とかが手間

esdocはエラーになったので、ちゃんと確認していない。

 

ひとまず、jsdocのままとしている

UIテンプレートで変えられると思い、探したけど、意外となかった。

 

生成されたHTML

http://dev.furoom.net/jsdoc3/jsdoc3/index.html

 

以下を参考に

http://usejsdoc.org/

http://www38.atwiki.jp/aias-jsstyleguide2/pages/14.html

 

つけとくものは、以下

 

ファイル

@fileoverview

 

モジュール

@exports or @module

 

クラス

@constructor

@extends

→リンクにならない・・。

 

@interface

@implements

あたりも

 

メソッド

@public

@protected

@private

@abstract ※googleに無し

@override

@param

@return

@callback {RedisClient~onSubscribe} ※googleに無し

 

定数

@const

 

ちょっと試したもの

@see

@link

@fires ※googleに無し

 

@fileoverviewと@exportsは別のコメントブロックにしないと正しく表示されない

@callback の後は、クラス名を入れないと正しく表示されない

@linkは、反映されない。ul li の書き方は試してない。

@seeも、リンクは貼られない。。

 

https://github.com/nilesflow/prototype-node.js-jsdoc

foreverをサービスとして起動

CentOS6.6、CentOS7.1

 

init.dの起動スクリプト+logrotate設定

https://github.com/nilesflow/centosetc

 

ログは、/var/log/foreverd.log

Node.jsログは、指定の場所に。

start の2重起動防止。

注意点は、foreverのHOMEディレクトリ。

HOME=xxxxxx

daemonの場合、ログインユーザでないため、/var/forever/.forever

ログインユーザの場合、/home/xxxxx/.forever

となる。

 

コマンドラインからの場合は、以下で参照可能。

HOME=xxxxxx forever list

※通常ユーザの場合、不要。

 

起動ユーザは、ログインユーザとdaemonに対応

forever-service はログ出力が制御できなかった。

initd-forever は、少し不足

 

以下のスクリプトを流用させてもらった

http://multix.jp/daemon-nodejs/

サーバ側

var https = require(‘https’);

var fs = require(‘fs’);
var ssl_server_crt = ‘/etc/pki/CA/certs/せrヴぇr-ca.crt’;
var ssl_server_key = ‘/etc/pki/CA/private/せrヴぇr.key’;
var ssl_ca_crt = ‘/etc/pki/CA/cacert.pem’;
var port = 443;

var options = {
key: fs.readFileSync(ssl_server_key),
cert: fs.readFileSync(ssl_server_crt),
ca: [fs.readFileSync(ssl_ca_crt)],
requestCert: true,
rejectUnauthorized : true,
};

var servers = https.createServer(options, function (req,res) {
fs.createReadStream(“index.html”).pipe(res);
}).listen(port);

var wss = new WebSocketServer({server:servers});

 

クライアント側

var fs = require(‘fs’);
var https = require(‘https’);
var WebSocket = require(‘ws’);

var ssl_client_crt = ‘/etc/pki/CA/client/certs/client.crt’;
var ssl_client_key = ‘/etc/pki/CA/client/private/client.key’;
var ssl_ca_crt = ‘/etc/pki/CA/cacert.pem’;
var ssl_client_pfx = ‘/etc/pki/CA/client/private/client.pfx’;

var options = {
ca : fs.readFileSync(ssl_ca_crt),
agent: false,

// key&certの指定
key : fs.readFileSync(ssl_client_key),
cert : fs.readFileSync(ssl_client_crt),
passphrase : ‘xxxxx’,

// 又は、pfxの指定
// passphrase : ‘xxxx’,
// pfx : fs.readFileSync(ssl_client_pfx),
};

var ws = new WebSocket(‘wss://xxxxx:443/’, null, options);

クライアント証明書にパスフレーズが含まれていると、

curlがエラーとなる

openssl pkcs12 -in client.pfx -out client.cert.pem -clcerts

curl https://xxxxx/ –cacert /etc/pki/CA/cacert.pem -E /etc/pki/CA/client/private/client.cert.pem
curl: (58) Unable to load client key -8178

curl https://xxxxx/ –cacert /etc/pki/CA/cacert.pem –cert /etc/pki/CA/client/certs/client.crt
curl: (58) Unable to load client key -8178.

curl https://xxxxx/ –cacert /etc/pki/CA/cacert.pem –cert /etc/pki/CA/client/certs/client.crt –key /etc/pki/CA/client/private/client.key
curl: (58) Unable to load client key -8178.

 

以下参照。

http://hogem.hatenablog.com/entry/2015/09/28/233000

http://stackoverflow.com/questions/20969241/curl-58-unable-to-load-client-key-8178

 

パスフレーズを外すと成功した

openssl rsa -in myclient.dev.furoom.net.key -out client.key.nopass
curl https://xxxxx/ –cacert /etc/pki/CA/cacert.pem –cert /etc/pki/CA/client/certs/client.crt –key /etc/pki/CA/client/private/client.key.nopass
→OK

 

wgetはパスフレーズ有りで成功した

wget -O – https://xxxxx/ –ca-certificate /etc/pki/CA/cacert.pem –certificate /etc/pki/CA/client/private/client.cert.pem

 

 

 

1. php phpredis

2. php predis

3. php predis-async

4. node.js redis

 

publish → subscribe までの時間

phpredis クライアントから26Mのファイル送信

クライアントpublish 0.3sec

1. 0.2sec

2. 0.5sec

3. 40sec ? 遅すぎ?

4. 4sec

 

ちなみにpublishにかかる時間

1. 0.3sec

2. 0.3sec

3. 35sec ? 遅すぎ?

4. 0.3sec

 

※上記複数クライアントを接続していたため、クライアント数を減らすと多少早くなる

 

——–

pubsub

お互いにsubscribe

subscribeを受けたら、publish

10000msg , 28byteデータ送信

 

1. node.js redis – node.js redis間

2. node.js redis – php phpredis間

2. node.js redis – php predis間

2. node.js redis – php predis-async間

 

結果

1.

pub完了 9041msg/sec

sub完了 7886msg/sec

2.

pub完了 12853msg/sec

sub完了 11834msg/sec

3.

pub完了 8319msg/sec

sub完了 6230msg/sec

4.

pub完了 8818msg/sec

sub完了 7342msg/sec

 

——–

ws-pubsub

wsからsend

お互いにsubscribe

subscribeを受けたら、publish

10000msg , 28byteデータ送信

 

1. node.js ws-client -> node.js ws-server & redis -> php phpredis

node.js ws-client <- node.js ws-server & redis <- php phpredis

 

ws-client 受信完了 1207msg/sec

ws-server pub完了 1216msg/sec

ws-server sub完了 1215msg/sec

phpredis pub完了 1216msg/sec

※redis-cli monitorで見ると、pubsub双方向は並列処理

※サーバは1cpu

predis-async を使った性能評価

同一サーバでpredis-asyncベースのクライアント/サーバ間でpub/sub

 

1.publish片方向

2.publish双方向

3.publish+lpush

※ appendonly yes 設定

 

1000msg送信を10回、その最大/最少

 

message size :28byte

1. 7405 – 8411 msg/sec

2. 4713 – 4951 msg/sec

3. 2697 – 3395 msg/sec

 

message size 4051byte

1. 6305 – 8042 msg/sec

2. 4217 – 4824 msg/sec

3. 2880 – 3129 msg/sec