使用socket.io+redis來實現基本的聊天室應用情境,socket.ioredis

來源:互聯網
上載者:User

使用socket.io+redis來實現基本的聊天室應用情境,socket.ioredis

本文根據socket.io與redis來實現基本的聊天室應用情境,主要表現於多個瀏覽器之間的資訊同步和即時更新.

首先看下基本的應用情境:多個瀏覽器同時跟webServer串連,可即時擷取webServer推送的資料,如顯示某一項即時更新的資料,多個client之間同步訊息等.

這裡,需要使用到socket.io和redis的publish機制.

1, socket.io串連於瀏覽器和nodejs的http伺服器之間,可用於二者之間同步資料.

2, redis是一種key-value的資料庫,可採用發布/訂閱(subscribe/publish)機制,可以訂閱一個頻道以接收主伺服器發布的所有訊息記錄.

大概的流程圖如下,主要分為三部分,



1, chat.js,

    建立一個node.js的http server,與瀏覽器建立socket.io串連,可以通過該socket.io串連將資料發送給各個瀏覽器,

    同時,建立一個redis的用戶端,訂閱redis-server的一個頻道(如chat頻道),

    主要代碼如下:

    // chat.js

    var http = require("http");

    var server = http.createServer().listen(4000);

    var io = require("socket.io")(server);

    

    var redis = require("../socket.io/node_modules/redis");

    var sub = redis.createClient();

    sub.subscribe("chat"); // 訂閱chat頻道


    io.on("connection", function(socket){

        sub.on("message", function(channle, msg){ // chat頻道一旦接收到訊息msg,則立即向socket.io串連中發送該msg資料.

            console.log("redis on message", msg);            

            socket.emit("msgReceived", msg);

        })

    })

    注意,該chat.js的http server要一直運行,同時與瀏覽器和redis-server建立串連或監聽.

2, 向redis-server的chat頻道發布訊息,

    可以採用redis-cli的方式:

    redis-cli -h localhost -p 6379

    向chat頻道發送簡單的訊息1234567890

    publish chat 1234567890

    也採用python的的redis模組:

    import redis

    r = redis.StrictRedis(host="localhost", port=6379, db=0)

    r.publish("chat", "1234567890")

    並且,redis-server也要一直運行.

    那麼,通過redis的chat頻道發布訊息,則訂閱該頻道的chat.js就能收到並做相應處理.

3, 最後,瀏覽器端如何接收socket.io中傳遞的資料呢?也很簡單.

    在js代碼中,

    <script src="http://localhost:4000/socket.io/socket.io.js"></script>

    var socket = io("http://localhost:4000")

    socket.io("connection", function(){

        console.log("connection setup for socket.io !")

    })

    socket.on("msgReceived", function(data){ // 這裡的msgReceived要與chat.js中的emit方法的參數對應起來

        // 對於data資料的處理過程

    })


    那麼至此,就可以在後端通過redis-cli或者python語句,向redis-server的chat頻道發布訊息,而chat.js訂閱的該chat頻道.

然後,chat.js再將訊息通過socket.io同步給所有與其建立socket.io串連的瀏覽器用戶端.

    大概地記錄了一下,如有不準確的地方,歡迎批評指正.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.