Answers:
使用express,socket.io,node_redis以及最后但并非最不重要的来自媒体fire 的示例代码。
首先,你应该(如果你还没有这样做还)安装的node.js + NPM在30秒(以正确的方式,因为你应该不运行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(因为有websockets支持,但不是必需的)。造访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:我还想指出一点,当客户端订阅发布/订阅频道时,它将进入订阅者模式,并且仅限于订阅者命令。您只需要创建其他Redis客户端实例。client1 = redis.createClient(), client2 = redis.createClient()
因此一个可以处于订户模式,另一个可以发出常规的DB命令。
pubsub/*
只需添加p
到例如:更换subscibe
用psubscribe
和message
用pmessage
。
我们试图理解Redis的发布/订阅(“ 发布/订阅 ”)和所有现有的例子要么过时,过于简单或没有测试。因此,我们使用了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
文件,但该文件已与 Hapi分离,可以轻松地与基本的 node.js http服务器或express(等)一起使用。
在GitHub上查看acani-node,尤其是文件acani-node-server.js。如果这些链接断开,请在acani的GitHub公共存储库中查找acani-chat-server 。
const client = redis.createClient()
app.js的根目录?