逐步解说:在JavaScript中订阅Redis缓存的消息

在这个逐步解说中,笔者将介绍如果在JavasScript中订阅Redis消息的详细步骤。首先,我们将在Azure虚拟机上搭建Redis缓存集群以及Webdis。然后,我们将在JavaScript中订阅Redis主题。Webdis为Radis提供了HTTP访问接口,我们的JavaScript代码将通过Webdis所提供的HTTP接口来访问后台的Redis。

在Azure上安装Redis和Webdis

  1. 登陆到Azure Management Portal。
  2. 创建一个基于Ubuntu Server 13.10的Linux虚拟机。
  3. 安装Redis 服务:
    sudo apt-get install redis-server
    
  4. 安装Webdis:
    sudo apt-get install webdis
    
  5. 编辑webdis/webdis.json文件以激活WebSocket支持 (第10行):
    {
            "redis_host":   "127.0.0.1",
            "redis_port":   6379,
            "redis_auth":   null,
            "http_host":    "0.0.0.0",
            "http_port":    7379,
            "threads":      5,
            "pool_size": 20,
            "daemonize":    false,
            "websockets":   true,
            "database":     0,
            "acl": [
                    {
                            "disabled":     ["DEBUG"]
                    },
                    {
                            "http_basic_auth":      "user:password",
                            "enabled":              ["DEBUG"]
                    }
            ],
            "verbosity": 6,
            "logfile": "webdis.log"
    }
    
  6. 启动Webdis服务:
    cd webdis
    ./webdis &
    
  7. [以下可选] 如果要建立一个Redis集群,新建第二个Linux虚拟机。注意创建的时候需要将新虚机加入到上述虚机所属的同一Cloud Service中。
  8. 在第二台虚机上安装Redis。
  9. 修改第二台虚机的redis.conf 文件, 加入如下行:
    slaveof [主Redis节点内部IP] 6379
    
  10. 启动第二节点。启动后,你应该能观察到两台虚机之间的数据同步操作:
    逐步解说:在JavaScript中订阅Redis缓存的消息_第1张图片

测试HTTP接口

  1. 在Redis服务器上,用命令:
    curl http://127.0.0.1:7379/GET/mykey
    来测试HTTP接口是否正常工作。
  2. 上述命令在我的系统中返回如下内容
    {"GET":"hello"}
    (我已经通过Redis-cli在缓存中加入了一个mykey/hello键值对):
  3. 在虚机上,定义一个公共端点以供客户端访问(见下图):
    逐步解说:在JavaScript中订阅Redis缓存的消息_第2张图片
  4. 端点建立后,你就可以用网络客户端来访问缓存内容了,例如查询一个键值:
    http://[Redis虚机名].cloudapp.net:7379/Get/[key]

在JavaScript中订阅Reids主题

在JavaScript中,向一个channel发送消息很容易:

 $.getJSON("http://[Redis虚机名].cloudapp.net:7379/PUBLISH/mychannel/" + "test", null);

如果要接收消息,我们需要利用WebSocket类并监听其onmessage事件:

var socket = new WebSocket("ws://[Redis虚机名].cloudapp.net:7379/.json");
socket.onopen = function() {
    socket.send(JSON.stringify(["SUBSCRIBE", "mychannel"]));
};
socket.onmessage = function(evt)
{
     alert(evt.data);
     ...
};



你可能感兴趣的:(逐步解说:在JavaScript中订阅Redis缓存的消息)