在本系列中,我们一直在学习Pusher中的Channels ,该平台可让您为用户提供所需的无缝实时体验。

存在通道建立在专用通道提供的安全性的基础上,但是它们增加了知道哪些用户已订阅并连接到该通道的好处。 最好的部分是实现和使用状态通道的容易程度,如果您已经将应用程序配置为使用私有通道,则更加容易。 您将在本文中学习如何使用在线渠道。

更好的聊天应用

我们的聊天应用程序当前使用专用通道,以促进即时的客户端/服务器通信。 因此,配置我们的应用程序以使用状态通道将非常容易。 让我们从服务器应用程序开始。

修改服务器

为了使用专用通道,我们配置了一个端点以确保用户已通过我们的应用程序进行身份验证。 该端点执行ChannelsControllerauthorizeUser()方法,并调用Pusher库的socket_auth()方法来帮助验证用户身份。 为了使用状态通道,我们需要更改authorizeUser()来调用Pusher库的presence_auth()方法,如下所示:

public function authorizeUser(Request $request) {if (!Auth::check()) {return new Response('Forbidden', 403);}$presenceData = ['name' => Auth::user()->name];echo $this->pusher->presence_auth($request->input('channel_name'), $request->input('socket_id'),Auth::user()->id,$presenceData);}

但是方法名称的更改只是第一次修改。 我们还必须为presence_auth()提供用户的唯一标识符,以及我们要提供的有关用户的任何其他信息。 上面的代码将这些额外的用户数据存储在$presenceData变量中,并将其作为最终参数传递给presence_auth()

另外,我们必须修改sendMessage()方法。 第一个更改是通道名称。 就像所有其他名称一样,我们必须在频道名称前添加前缀以表示我们要使用的频道类型: presence-在这种情况下,如以下代码所示。

$this->pusher->trigger('presence-chat', 'send-message', $data);

我们还可以修改随事件发送的数据,而不是提供引发事件的用户名,而是可以包含用户ID。

$data['user'] = Auth::user()->id;

因为我们将使用在线状态通道,所以我们可以从客户端中查找用户名,这一小的更改将减少通过网络传递的数据量。

更换客户

客户端的channel对象包含我们需要使用已订阅频道的所有内容,并且查询用户数据也不例外。 我们的channel对象具有一个称为members的属性,我们可以使用该属性来检索特定用户的信息。 我们将在send-message事件处理程序中使用此对象,如下所示:

this.channel.bind('send-message', (data) => {let user = this.channel.members.get(data.user);this.messages.push({message: data.message,user: user.info.name});});

在这里,我们调用this.channels.members.get()并传递用户ID(请记住,我们的服务器应用程序现在提供ID而不是名称)。 此方法返回一个具有info属性的对象,并且此info对象包含我们在服务器上的authorizeUser()方法的$presenceData变量中提供的所有其他信息。 因此,在上面的代码中,我们使用user.info.name检索用户的名称。

我们还可以修改trigger()方法以包括有关发起客户端警报事件的用户的信息。 要检索当前登录用户的成员数据,请使用me属性,如以下代码所示:

trigger(eventName, message) {this.channel.trigger(eventName, {message,user: this.channel.members.me});}

在此代码中,我们向事件有效负载添加了一个user属性,并将其设置为已登录用户的用户对象。 这意味着我们可以修改client-send-alarm事件处理程序,以在警报消息中包含用户名,如下所示:

this.channel.bind('client-send-alarm', (data) => alert(`${data.user.info.name}: ${data.message}`));

在这里,我们使用data.user.info.name来访问用户名,以便我们看到哪个用户发送了警报,如下所示:


结论

使用状态通道不仅为您的应用程序提供了匿名通道的更高的安全性,而且还使您能够查询用户数据以获取订阅该通道的用户。 借助Pusher的Channels ,可以非常轻松地为您的应用添加安全,实时且功能丰富的通信。

翻译自: https://code.tutsplus.com/tutorials/get-started-with-pusher-using-presence-channels--cms-31448

Pusher入门:使用状态通道相关推荐

  1. 区块链BaaS云服务(28)TOP Network 之业务链和单向状态通道(Layer-2)

    1. 业务链 一种为某一具体业务而构建的链,可以轻松地部署自己的个人业务链链,以满足其应用的需求.eg. VPN service有VPN服务链.d-storage service有去中心化存储服务链. ...

  2. 以太坊 2.0、分片、DAG、链下状态通道……概述区块链可扩展性的解决方案!

    封面 | CSDN 付费下载于视觉中国 作者 | Rohit Chatterjee 责编 | 徐威龙 出品 | 区块链大本营(blockchain_camp) 事实证明,可扩展性是当今采用区块链技术的 ...

  3. 学习状态通道,Part-1:支付通道

    在我的上一篇博文中,我简单地讨论了状态通道,以及为什么我认为它对于开启以太坊的大规模可用性来说,是至关重要的.在此,我打算通过几篇博文来推进一步,这些博文对 L4 团队用 Countfactual 做 ...

  4. Counterfactual 项目:广义的以太坊状态通道

    -由反事实实例化(Counterfactually Instantiated)对象组成的典型状态通道- 我们已经进行了一些关于状态通道和区块链扩展性的研究,并在 L4 上展示.今天很高兴再次分享我们的 ...

  5. 学习状态通道,Part-2:App 定制型状态通道

    Part-1:支付通道 注:我决定改变这个系列的名称,把重点放在状态通道,而不是 Counterfactual 上,以便我们能够涵盖状态通道中所有的工作,而且不会将这两个概念混为一谈. 在我们开始之前 ...

  6. 学习状态通道,Part-3:多跳交易/中心辐射通道

    Part-1:支付通道 Part-2:App 定制型状态通道 在我们开始之前,如果你还没有读过我的第一篇博文--菜鸟学习状态通道,Part-1,你一定得看一下,因为本博文是基于第一篇的.对此感兴趣的人 ...

  7. 学习状态通道,Part-4:账本通道和虚拟通道

    Part-1:支付通道 Part-2:App 定制型状态通道 Part-3:多跳交易/中心辐射通道 在开始读本博文之前,我建议你先读中心辐射支付通道(译者注:即同系列 Part-3),因为我们要用到其 ...

  8. 以太坊2.0、分片、DAG、链下状态通道……概述区块链可扩展性的解决方案!

    作者 | Rohit Chatterjee 责编 | 徐威龙 出品 | 区块链大本营(blockchain_camp) 封面 | CSDN 付费下载于视觉中国 事实证明,可扩展性是当今采用区块链技术的 ...

  9. 分片、侧链、状态通道、子链、DAG 是什么 区别

    一.分片(sharding) 区块链网络由主链和分片(shards)链组成,分片链上交易处于自己独立的空间中,可以独立处理交易. 其核心思路是并非每个节点都需要处理所有的交易. 分片之前整个网络的处理 ...

最新文章

  1. 邬贺铨院士:认识工业互联网
  2. 多网卡下如何配置指定IP走某个路由器(适用于外网不通,但是钉钉服务器通的情况)...
  3. api restful_HATEOAS的RESTful服务。 记录超媒体API
  4. 计算机网络(二十五)-IP数据报格式
  5. Portal-Basic Java Web应用开发框架V3.0正式发布(源码、实例及文档)
  6. Windows2008r2如何关闭防火墙
  7. 戴尔携手EMC战略合作续签至2013年
  8. linux文件类型及用户相关命令
  9. 【概念理论】不存在的NOIP2016
  10. Codeforce 1175 D. Array Splitting
  11. 微信支付宝个人免签约即时到帐接口开发附demo
  12. php获取客户端IP和php获取服务器端IP
  13. 【京东商城首页实战4】topbanner制作
  14. android 高德卫星地图数据,白马地图 Bmap for Android v7.3.81 强大高德百度地图应用|张小北...
  15. 【每日一句】名人金句学英语(1130)
  16. PL读写DDR3 实现PS和PL间的数据交互 代码分析
  17. Springboot注解@ServletComponentScan和@ComponentScan
  18. 初学ue4#2 制作3d视角人物part2
  19. 【来龙去脉系列】什么是区块链?
  20. 很不错的教程一步步教你如何写Makefile

热门文章

  1. java android 读写三菱PLC 使用TCP/IP 协议
  2. SRC-script:挖掘src常用脚本收集
  3. QD入门.symbian手机通用(转)
  4. 写过Flex的非Flex人士
  5. Deciphering Malware‘s use of TLS (without Decryption)阅读笔记
  6. 阿里云国际版CDN真的这么神奇吗?
  7. PHP学习使用资源简单总结
  8. 程序人生 - 数字人民币与微信支付宝有何不同?
  9. 美国电子工程计算机博士 陈,美国大学博士电气与电子工程排名
  10. Antimalware Service Executable 彻底关闭 没有繁琐的操作,一步到位,亲测有效!!!