サーバ側

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

 

PHPのインストール

 

関連ライブラリのインストール


yum install libxml2-devel

yum install libpng-devel

yum install libicu-devel

yum install libmcrypt-devel

yum install libxslt-devel

 

PHPのインストール


wget https://downloads.php.net/~ab/php-7.0.0beta2.tar.xz

tar Jxf php-7.0.0beta2.tar.xz

cd php-7.0.0beta2

./configure –prefix=/usr/local/php-7.0.0beta2 –enable-bcmath –enable-calendar –enable-gd-jis-conv –enable-gd-native-ttf –enable-intl –enable-mbstring –enable-mbregex –enable-pcntl –enable-soap –with-curl –with-freetype-dir –with-gettext –with-gd –with-jpeg-dir –with-libxml-dir –with-mcrypt –with-mhash –with-openssl –with-pcre-dir –with-png-dir –with-readl
ine –with-xsl –with-zlib

※mysql はwarningが出たので外した

※pearもテストでエラーになったので外した

 

make

make test

make install

linux に node.js をインストール

参考:

http://qiita.com/moris/items/4850d4e19392186e34f0

 

yum install gcc

yum install gcc-c++

 

node.js

 

https://nodejs.org/download/

wget https://nodejs.org/dist/v0.12.7/node-v0.12.7.tar.gz
tar xvzf node-v0.12.7.tar.gz
cd node-v0.12.7
./configure –prefix=/usr/local
make
make install