Pusher入门:使用Channels,PHP和Vue.js构建聊天应用程序
Pusher的Channels是一个平台,可让您为应用提供无缝的实时数据。
在这篇文章中,我将向您展示如何编写一个非常简单的聊天应用程序的功能组件。 这是一个简化的示例,但是您将看到Channels如何简化Web应用程序中实时通信的实现。
设置服务器
我们的服务器应用程序是一个名为messages.php的 PHP文件,它将处理来自浏览器的POST请求。 我们的消息处理程序会将客户端的消息发送到Channels服务,然后该服务将这些消息广播到其他客户端。
在将PHP用于服务器应用程序时,您要下载并使用Channels库,并且可以使用composer和以下命令安装该库:
composer require pusher/pusher-php-server
messages.php的代码几乎与您在“渠道”信息中心的“入门”页面上找到的代码完全一样。 仅有一些修改。
首先,您需要要求autoload.php文件才能使用Pusher库:
require './../vendor/autoload.php';
接下来,来自客户端的数据为JSON格式,因此我们显然希望将其解码为可行的PHP数组。
$data = json_decode(file_get_contents('php://input'), true);
然后,我们要设置Pusher对象,以便随后可以触发事件。
$options = array('cluster' => 'us2');$pusher = new Pusher\Pusher('427017da1bd2036904f3','c46fabbaf65c4c31686b','534815',$options);
如果启用了encrypted
选项,我的PHP安装将无法正常工作,因此我从代码中省略了它。 您的里程可能会有所不同,但是请务必注意, encrypted
选项确定服务器和渠道之间发送的数据是否已加密。 它与Channels与客户端之间的连接无关—客户端库负责处理。
服务器代码的最后一行将消息数据发送到Channels:
$pusher->trigger('anon-chat', 'send-message', $data);
与其他服务器库一样,我们将三件事传递给trigger()
方法:
- 频道名称:
anon-chat
- 事件名称:
send-message
- 有效载荷:
$data
请注意,通道和事件名称与“入门”页面上使用的通道和事件名称不同。 您不必在仪表板中创建新通道或定义自定义事件。 只需在代码中使用所需的任何通道和事件名称即可。
完成客户
我们的客户是一个网页,其中包含三个为UI提供动力的Vue.js组件。 主要成分是所谓的ChannelsChat
,这是我们将让我们的Pusher
对象侦听send-message
的事件anon-chat
频道。 让我们使用created
钩子。
created() {let pusher = new Pusher('427017da1bd2036904f3', {cluster: 'us2',encrypted: true});let channel = pusher.subscribe('anon-chat');channel.bind('send-message', function() {} // to be implemented later);}
在此代码中,我们创建了Pusher
对象,订阅了anon-chat
频道,并监听了send-message
事件。
因为这是一个聊天应用程序,所以我们需要存储消息历史记录,以便使用该应用程序的任何人都可以看到他们在会话期间收到的所有消息。 完成此操作的最简单方法是将每个消息作为元素存储在数组中。 因此,让我们向此组件添加一个messages
数据属性,如以下代码所示:
data() {return {messages: []}}
然后,当我们收到一条消息时,我们只需push()
其push()
到我们的数组中,如以下代码所示:
channel.bind('send-message', (data) => this.messages.push(data.message));
然后,我们将messages
到MessageView
组件:
<message-view :messages="messages" />
传送讯息
我们的最后一个代码属于MessageSend
组件; 当用户键入一条消息并单击“发送”按钮时,我们需要将该数据发送到messages.php
。
首先,让我们确保用户在文本框中输入了一些内容。 否则,无需执行任何操作!
sendMessage(e) {if (!this.message) {return;}// to be continued...
message
属性绑定到<input/>
的值,因此我们将使用它来确定是否有任何数据。
接下来,我们将POST请求发送到message.php
,数据是一个具有message
属性的对象。
// (continued)axios.post('/message.php', {message: this.message}).then(() => {this.message = '';}).catch((err) => {alert(err);});}
如果请求成功,我们将清除message
属性的值,这又将清除<input/>
的值(请记住它们已绑定)。 如果请求失败,则会出现一个警告框,通知用户发生了错误。
代码就是这样。 因此,打开两个浏览器窗口并将它们指向index.php
。 开始发送消息,您应该看到两个窗口都将自动更新并显示消息。
结论
如您所见,使用Channels可以非常轻松地快速将实时通信添加到您的应用程序中,它甚至不需要很多代码!
您还了解到,编写代码时可以即时创建频道和事件。 无需在使用它们之前进行设置。
最后,您学习了如何设置应用程序以合并实时通信。 只需处理来自服务器的传入用户输入,然后根据该输入触发事件。
翻译自: https://code.tutsplus.com/tutorials/get-started-with-pusher-build-a-chat-app-with-channels-php-and-vuejs--cms-31252
Pusher入门:使用Channels,PHP和Vue.js构建聊天应用程序相关推荐
- 使用Pusher和Vue.js构建实时聊天应用
如今,实时通信的应用程序越来越流畅,用户体验也变得越来越流行. 在本教程中,我们将使用由Chater提供的服务ChatKit提供支持的Vue.js构建实时聊天应用程序. ChatKit服务将为我们提供 ...
- 使用 Vuex + Vue.js 构建单页应用 1
鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...
- python django vue_Django+Vue.js构建项目
本文主要讲述如何从0开始,用Django和Vue.js构建一个项目.文章提要:Django与vue.js整合开发原理 从头新建一个Django项目 新建一个前端页面,使用vue应用 在Django中设 ...
- mpvue 微信小程序_使用Vue.js开发微信小程序:开源框架mpvue解析
戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...
- 用Vue.js开发微信小程序:开源框架mpvue解析
前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...
- vue.js 构建项目_使用Vue.js和AWS Amplify构建Chatbot
vue.js 构建项目 Over the last few years, chatbots have exploded in popularity. It makes sense that busin ...
- h5+js调取相机做取景框_使用Vue.js开发微信小程序:开源框架mpvue解析
戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...
- Laravel6.0 + vue.js + elementUI + 微信小程序 实现沃尔玛扫码购
本次项目使用 Laravel6.0 + vue.js + elementUI + 微信小程序 实现沃尔玛扫码购 项目设计-接口 本次项目所有接口使用 laravel 框架实现. 项目设计-后台 后台开 ...
- vue查看本地相册_使用Vue.js构建的Google相册相册查看器
vue查看本地相册 google-photos-vue (google-photos-vue) Google Photos album viewer built with Vue.js. 使用Vue. ...
最新文章
- JAVA基础知识(3)
- RabbitMQ的消息确认机制
- MySQL日志详细说明
- 数组的fill方法_数组fill()方法以及JavaScript中的示例
- windows多线程同步互斥--总结
- 【杂项】2021年年度报告
- 二级计算机java2017级_2017计算机等级二级考试java练习题及答案
- PowerBI使用Tabular Editor翻译报表模型
- 前端学习路线,如何学习前端
- vagrant共享目录出现“mount:unknown filesystem type ‘vboxsf‘”错误解决方法(亲测可行)
- 拳皇98系列连招—金家潘学习笔记
- 【甲级PAT】-1132 Cut Integer (20分)-数字处理
- 信息系统项目管理师核心考点(八)软件集成技术
- Linux学习——vi/vim编辑C程序并运行
- 【树形结构】巴基斯坦城市列表 (城市原始数据来自md文件)
- 安卓开发常用的adb命令
- 品牌推广方法大全(收藏日后必有用处)
- 深信服——字符串模糊匹配
- 如何看待这份2018互联网校招高薪清单?(谷歌阿里腾讯华为网易)
- 卡硬工具箱说系统服务器,卡硬工具箱|卡硬工具箱 v2.95官方版 - 系统天堂
热门文章
- 线性代数——方阵的行列式、伴随矩阵、逆矩阵
- 弹载计算机标准,弹载计算机
- Networkx图与网络工具包
- 使用 Python Turtle 制作贪吃蛇游戏
- 喊你参赛!2021 CCF BDCI 数字安全公开赛,8月23日火热来袭!
- 将Ubuntu等linux系统安装到移动硬盘--操作系统随身携带
- 在c语言中 要求运算量必须是整型或字符型,在C语言中,要求运算数必须是整型或字符型的运算符是()....
- 苹果CMS V10大气橙色风格影视电影视频网站模板
- 学习vue前的准备(繁琐的)
- 如何构建社区团购的核心竞争力?