zoukankan      html  css  js  c++  java
  • 消息中心

    前言


    在上一章主要梳理了信息中心的运行机制,了解了服务端是如何把更新的信息主动推送给客户端的,接下来我会介绍下消息中心是如何搭建的以及现在可能会出现问题。

    背景知识


    laravel 队列运行机制
    消息中心实现逻辑

    消息中心

    1.设置配置

    .env文件

     BROADCAST_DRIVER = redis
     QUEUE_DRIVER=redis
    

    config/app.php

    AppProvidersBroadcastServiceProvider::class  //加载
    
    2. 设置路由

    //设置用户频道,以便客户端监听。为了方便,直接返回true

    Broadcast::channel('todoevent.updated.*', function($user, $userId){
            return true;
    });
    
    3. 添加predis依赖
    composer require predis/predis
    
    4. 创建事件类
    php artisan make:event TodoEventUpdated
    

    //默认是不实现ShouldBroadcast接口

            class TodoEventUpdated implements ShouldBroadcast
     {
        		use InteractsWithSockets, SerializesModels;
    
        		public $event;
    
       		 public function __construct($event)
        		{
            		$this->event= $event;
       		 }
    
       		 //添加私人频道,于路由设置一致
       		 public function broadcastOn()
        		{
           		 	if($this->event) {
    
              	 	 return new PrivateChannel('todoevent.updated.' . $this->event->get('user_id'));
            		}
      		 }
                     
                     //可对事件内容作修改。返回客户端需要的内容
       		// public function broadcastWith()
       		// {
       		// }
    }
    
    5. 测试广播已到redis

    HomeController.php

    use AppEventsTodoEventUpdated;
    public function index()
    {
        broadcast(new TodoEventUpdated(collect(['user_id' => 8164])));
     }
    

    执行home/index后,查看redis客户端

    "SELECT" "0"
    "RPUSH" "queues:default" "{event}"
    

    event已经写入redis,代表redis连接成功

    6. 开启消费进程
    php artisan queue:work
    

    //发现事件已被消费

    Processing: AppEventsTodoEventUpdated
    Processed:  AppEventsTodoEventUpdated
    
    7. 安装 laravel-echo-server,订阅redis
    cnpm install -g laravel-echo-server
    

    安装成功后,移步到项目下

    laravel-echo-server init  //初始化
    laravel-echo-server start //启动
    

    2
    laravel-echo-server 已成功的监听了 redis 。
    注:laravel-echo-server 运行在6001端口,如果你用的是homestead等集成环境,请查看端口是否开启

    8. 安装socket.io-client、laravel-echo
    cnpm i --save socket.io-client
    cnpm i --save laravel-echo
    

    打开/resources/assets/js/bootstrap.js,会出现下面代码

    import Echo from 'laravel-echo'
    window.Pusher = require('pusher-js');
    window.Echo = new Echo({
         broadcaster: 'pusher',
         key: 'your-pusher-key'
    });
    

    改造为:

    import Echo from 'laravel-echo'
    window.LaravelEcho= Echo;
    

    编译

    cnpm run dev
    

    以上的事件广播都搭建完了。下面让第三方应用可以监听吧

    9. 第三方应用监听
    <script src="http://focusmessage.vemic.com:6001/socket.io/socket.io.js"></script> //引入socket.io客户端
    <script src="text/javascript">
      window.Echo = new LaravelEcho({
        broadcaster: 'socket.io',
        host: 'http://focusmessage.vemic.com:6001'
       });
      Echo.private('todoevent.updated.8164')
       .listen('TodoEventUpdated', function(event) {
       console.log(event); //获取的信息
      });
    </script>
    
  • 相关阅读:
    设计模式-原型模式(06)
    看起来很懵的java内存加载面试题
    回数
    花式赋值
    常量
    Python解释器安装
    计算机基础小结
    网络的瓶颈效应
    __init__和__new__
    super()方法详解
  • 原文地址:https://www.cnblogs.com/SexyPhoenix/p/11770032.html
Copyright © 2011-2022 走看看