回答:
express、socket.io、node_redisを使用しますが、最後にメディア火災からのサンプルコードを使用します。
最初に(まだ行っていない場合)30秒でnode.js + npmをインストールする必要があります(rootとしてnpmを実行してはいけないため、正しい方法です):
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
./configure --prefix=~/local
make install # ok, fine, this step probably takes more than 30 seconds...
curl http://npmjs.org/install.sh | sh
node + npmをインストールしたら、次を発行して依存関係をインストールする必要があります。
npm install express
npm install socket.io
npm install hiredis redis # hiredis to use c binding for redis => FAST :)
完全なサンプルはmediafireからダウンロードできます。
unzip pbsb.zip # can also do via graphical interface if you prefer.
./app.js
const PORT = 3000;
const HOST = 'localhost';
var express = require('express');
var app = module.exports = express.createServer();
app.use(express.staticProvider(__dirname + '/public'));
const redis = require('redis');
const client = redis.createClient();
const io = require('socket.io');
if (!module.parent) {
app.listen(PORT, HOST);
console.log("Express server listening on port %d", app.address().port)
const socket = io.listen(app);
socket.on('connection', function(client) {
const subscribe = redis.createClient();
subscribe.subscribe('pubsub'); // listen to messages from channel pubsub
subscribe.on("message", function(channel, message) {
client.send(message);
});
client.on('message', function(msg) {
});
client.on('disconnect', function() {
subscribe.quit();
});
});
}
./public/index.html
<html>
<head>
<title>PubSub</title>
<script src="/socket.io/socket.io.js"></script>
<script src="/javascripts/jquery-1.4.3.min.js"></script>
</head>
<body>
<div id="content"></div>
<script>
$(document).ready(function() {
var socket = new io.Socket('localhost', {port: 3000, rememberTransport: false/*, transports: ['xhr-polling']*/});
var content = $('#content');
socket.on('connect', function() {
});
socket.on('message', function(message){
content.prepend(message + '<br />');
}) ;
socket.on('disconnect', function() {
console.log('disconnected');
content.html("<b>Disconnected!</b>");
});
socket.connect();
});
</script>
</body>
</html>
cd pbsb
node app.js
google chromeを開始するのが最適です(websocketがサポートされているためですが、必須ではありません)。http://localhost:3000
サンプルを見るためにアクセスしてください(最初はPubSub
タイトルとして何も表示されていません)。
しかし、publish
チャンネルにpubsub
行くとメッセージが表示されるはずです。以下は"Hello world!"
ブラウザに公開しています。
publish pubsub "Hello world!"
これは、依存関係のない単純化された例です。あなたはまだする必要がありますnpm install hiredis redis
ノードJavaScript:
var redis = require("redis"),
client = redis.createClient();
client.subscribe("pubsub");
client.on("message", function(channel, message){
console.log(channel + ": " + message);
});
...それをpubsub.jsファイルに入れて実行します node pubsub.js
redis-cli:
redis> publish pubsub "Hello Wonky!"
(integer) 1
表示する必要があります:pubsub: Hello Wonky!
ノードを実行しているターミナルで!おめでとうございます!
追加4/23/2013:クライアントがpub / subチャネルをサブスクライブすると、サブスクライバーモードになり、サブスクライバーコマンドに限定されることにも注意したい。Redisクライアントの追加のインスタンスを作成する必要があるだけです。client1 = redis.createClient(), client2 = redis.createClient()
そのため、1つはサブスクライバーモードで、もう1つは通常のDBコマンドを発行できます。
pubsub/*
だけで追加p
置き換える:例にsubscibe
してpsubscribe
とmessage
してpmessage
。
私たちはRedis Publish / Subscribe( " Pub / Sub ")を理解しようとしていましたが、既存の例はすべて時代遅れであるか、単純すぎるか、テストがありませんでした。そこで、Hapi.js + Socket.io + Redis Pub / Subサンプルを使用した完全なリアルタイムチャットをエンドツーエンドテストで作成しました。
Pub / Subコンポーネントは、node.jsコードのほんの数行です:https : //github.com/dwyl/hapi-socketio-redis-chat-example/blob/master/lib/chat.js#L33-L40
ここに(コンテキストなしで)貼り付けるのではなく、例をチェックアウト/試してみることをお勧めします。
私たちは、使用して構築されたHapi.jsが、chat.js
ファイルがある・ド結合ハピからとすることができ、容易に使用する基本的な Node.jsのHTTPサーバーまたは表明(など)
GitHubのacani-node、特にacani-node-server.jsファイルを確認してください。これらのリンクが壊れている場合は、acaniのGitHubパブリックリポジトリからacani-chat-serverを探してください。
これをsocket.io 0.7で動作させたい場合、および外部Webサーバーを変更する必要がある場合(staticProvider-> staticの問題以外に):
a)localhostの代わりにドメイン名を提供します(つまり、var socket = io.connect( 'http://my.domain.com:3000');)をindex.htmlに指定します
b)app.jsのHOSTを変更します(つまり、const HOST = 'my.domain.com';)
c)app.jsの37行目にソケットを追加します(例: 'socket.sockets.on(' connection '、function(client){…')
const client = redis.createClient()
app.jsのルートに必要なのですか?