<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 9. 發布與訂閱 redis在2.8.0版本之后出了一個新功能,叫[Pub/Sub](http://redisdoc.com/topic/pubsub.html),也叫`"發布與訂閱"`。 在這篇文章中不僅要介紹它是如何用的,更重要的是要介紹它的應用場景。 在之前介紹[websocket之用tubesock在rails實現聊天室(五)](http://www.rails365.net/articles/websocket-zhi-yong-tubesock-zai-rails-shi-xian-liao-tian-shi-wu)的時候,就用redis的pub/sub實現過聊天室。相關的代碼是這樣的: ``` redis_thread = Thread.new do Redis.new.subscribe "chat" do |on| on.message do |channel, message| tubesock.send_data message end end end tubesock.onmessage do |m| Redis.new.publish "chat", m end ``` 說到這個發布與訂閱,必須說到一個詞叫`"channel"`(通道)。接收消息者在通道上訂閱消息,而發布消息者在通道上發布消息,發布者和接收者就是這樣來交互信息的。 比如,我現在有一個客戶端a,在訂閱通道`room`,它就一直在等待,直到有消息到來,而我又開了另一個客戶端b,它在通道`room`上發布了一條消息`“hello"`,客戶端a馬上就可以收到消息`"hello"`。而類似a這樣的客戶端有很多個。這種方式就是可以實現聊天室的。因為它像廣播消息,有一個消息出來了,每個只要訂閱通道的客戶端就會收到。 我們來實現一下。 首先用`redis-cli`進入redis的客戶端命令交互界面。 輸入`SUBSCRIBE room`,表示訂閱通道`"room"`。 ``` 127.0.0.1:6379> SUBSCRIBE room Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "room" 3) (integer) 1 ``` 現在再開啟另一個`redis-cli`客戶端。 在通道`"room"`通道 上發送一條信息`"hello"`。 ``` > publish room hello ``` 先前的客戶端會收到這樣的消息: ``` 1) "message" 2) "room" 3) "hello" ``` 這樣就完成了整個訂閱與發布的流程。 `publish`那個客戶端一直停在那,它沒有退出,只要給它發送消息,它就可以接收消息。 當然,像`publish`那個客戶端可以開啟多個,只要訂閱`"room"`這個通道的客戶端都會收到相同的消息。 **還需要注意的一個點就是當沒有任何訂閱的客戶端時,進行`publish`時,數據是不會被存儲起來的。** 也就是說,下次有人訂閱的時候,是收不到消息的。 ``` 127.0.0.1:6379> publish room hello (integer) 0 ``` redis的訂閱與發布比較常見的應用就是聊天室,當然還有其他的,比如做一個推送系統。 手機等客戶端可以用redis訂閱一個通道,然而后臺可以給通道發布消息,這樣,所有的手機客戶端都可以通過通道得到后臺發布的消息。 這樣子實現,又能利用redis的快速和高性能的特點,也避免了傳統方式的輪循作法。 完結。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看