“练习3-1”演示了使用Pusher接收事件是多么容易,但是发送事件又如何呢?

由于Pusher有丰富的API库,因此发送事件和接收事件一样容易。我们将使用PHP的API库。该库托管在GitHub服务上,地址为https://github.com/pusher/pusher-php-server。

练习3-2 使用Pusher发布和订阅

为了熟悉Pusher的服务器端功能,让我们构建一个简单的信息系统。

我们将重用第2章中使用过的HTML和CSS的大部分内容并以它们作为基础,以节约时间。创建新的HTML文件,并输入下列内容:

该代码创建了一个接收名字和信息的简单的表单。同时以无序列表的形式显示所有接收到的信息。

接着,我们添加一些CSS。创建文件夹styles,并在其中添加新文件layout.css。该文件已经连接到前面创建的HTML文件中了。在新的CSS文件中添加下面的代码:

在浏览器中载入HTML文件,你将看到有CSS样式的标记(见图3-5)。

现在你已经有了一个页面。该页面包括一个有用户界面的区域,可以用来发送和接收消息。这样,我们可以开始通过发布和订阅添加一些实时功能。在HTML中,我们知道表单会将条目提交到文件post.php,现在我们开始创建那个文件,并包括Pusher的PHP库。

从https://github.com/pusher/pusher-php-server下载Pusher的PHP库,并将lib文件夹复制到HTML文件所在的同一文件夹下。

在保存后,可以开始在post.php中添加几行代码来创建一个新的Pusher对象并发送数据。

前两行打开错误报告,以使调试更加容易。(在用于发布的网站版本中,可以将其关闭。)接下来,包括Pusher的PHP库,并定义应用程序的证书(请不要忘记使用自己的证书来替换),并实例化一个Pusher对象并存储在变量$pusher中。

接下来,脚本检查两个需要的表单值:name和message。如果它们存在,将它们存储在数组中。接着,用trigger方法将数组传递给Pusher,则会触发在“练习3-2”中那个通道的send-message事件。事件数据将以JSON的形式传递给trigger方法,而对JSON的处理由库为我们执行。

到此为止,提交表单会引起Pusher发送事件。然而,在我们看到应用程序的效果前,我们需要用JavaScript添加一个事件处理程序。首先,我们还是先用Pusher调试控制台手动检查一下,确认事件可以触发(见图3-6)。

为了在应用程序中以可视化的方式显示这一消息,我们需要编写JavaScript来连接Pusher、订阅通道并绑定事件。

我们的HTML文件包括一个称为init.js的脚本。因此,让我们在scripts文件夹下创建那个文件。在该脚本文件中,我们将添加两个代码块,一个会侦听服务器端脚本触发的事件,另一个会捕获提交的表单并在不刷新页面的情况下将它们提交给post.php。首先,让我们为自定义的Pusher事件添加一个事件侦听器:

使用我们的应用程序密钥创建了一个新的Pusher对象。(与之前一样,别忘了使用自己的密钥。)接着,我们订阅了在“练习3-2”中的服务器端使用的通道。

接下来,我们要对那个通道绑定事件处理程序并捕获send-message事件。触发该事件时,我们将无序列表的消息显示,并确保去除其中用做占位符的消息。接着,将新消息添加到列表的尾部。

重新载入页面会失去应用程序之前用JavaScript从浏览器添加的所有消息。为了避免重新载入页面,我们需要添加第二个代码块来捕获表单提交,并通过AJAX提交它们,而不使用页面刷新。插入下面的粗体代码来添加这一功能:

这个代码捕获submit事件,并将序列化的表单数据发送给post.php,同时清空消息输入。它保留name字段,使得重复的消息更易发送。在最后,它还将显示的焦点移回消息输入的末尾。

通过返回false,可以防止提交默认的表单,以阻止页面重新载入。

现在你已经可以测试该应用程序了。在浏览器中载入HTML文件,并发送一两条消息。正如预期的一样,会在右边的列表上显示。但是这还不是最激动人心的部分。

为了查看实时的威力,可以在两种不同的浏览器(或同一浏览器的两个窗口)上载入测试,开始发送一些消息。在没有轮询或页面刷新的情况下,你会看到一个窗口的事件会影响另一个窗口的显示(见图3-7)。这就是实时。

pusher 创建新应用_3.5 使用Pusher发送事件相关推荐

  1. pusher 创建新应用_基于 Laravel + Pusher + Vue 通过事件广播构建实时聊天室应用

    基于 Laravel + Pusher + Vue 通过事件广播构建实时聊天室应用 由 学院君 创建于2年前, 最后更新于 3个月前 版本号 #3 前言:学院君之前有说过要整理出一篇事件广播手把手教程 ...

  2. pusher 创建新应用_laravel之pusher应用广播事件- 黑白课堂

    版本说明 composer指定版本可以查看 https://www.jianshu.com/p/ef31d9c9094b laravel5.2 pusher版本 "pusher/pusher ...

  3. pusher 创建新应用_使用 Laravel-echo-server 构建实时应用

    文章转发自专业的Laravel开发者社区,原始链接:learnku.com/laravel/t/1- 在我看来,实时通信才是 APP 应用的将来. Socket 服务通常不是那么容易实现,但是 Lar ...

  4. ios pusher使用_如何使用JavaScript和Pusher构建实时评论功能

    ios pusher使用 by Rahat Khanna 通过拉哈特·汉娜 如何使用JavaScript和Pusher构建实时评论功能 (How to build a Live Comment fea ...

  5. vue js 对象下的原型_如何使用Vue.js和Pusher创建实时原型反馈应用程序

    vue js 对象下的原型 by Neo Ighodaro 由新Ighodaro 如何使用Vue.js和Pusher创建实时原型反馈应用程序 (How to create a realtime pro ...

  6. ios pusher使用_如何使用JavaScript和Pusher构建实时图

    ios pusher使用 by Rahat Khanna 通过拉哈特·汉娜 如何使用JavaScript和Pusher构建实时图 (How to build a Realtime Graph usin ...

  7. ios pusher使用_如何使用JavaScript和Pusher实时更新用户状态

    ios pusher使用 by Rahat Khanna 通过拉哈特·汉娜 如何使用JavaScript和Pusher实时更新用户状态 (How to update a User's Status i ...

  8. 【运维学习笔记】在 vSphere Client上创建新的虚拟机

    具体步骤如下: 1. 创建新的虚拟机 打开vSphere Client(可以是客户端也可以是网页端) 如果是网页端仅能使用火狐浏览器或者谷歌浏览器打开,输入网址:192.168.22.22,进入如下界 ...

  9. asp.net mysql 创建变_[ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...

    [ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型 0 2018-06-30 07:00:08 官方教程: ...

最新文章

  1. linux内存布局及页面映射
  2. 下的生产环境was重新启动不同意,怎么做?
  3. 微信公众号基本信息配置
  4. linux mail.rc 端口,配置mail.rc 文件并使用mail发送邮件的详细配置
  5. 迅雷2012校园招聘笔试题
  6. docker 创建容器报: Error response from daemon: C: drive is not shared.
  7. 自学提高:JVM点滴
  8. delphi 通讯数据解析_网络工程师-ARP是如何解析?
  9. 防SQL注入(转载)
  10. [转载]Mysql导出表结构及表数据 mysqldump用法
  11. MySQL导入与导出备份详解
  12. VirtualBox中,Windows虚拟机与主机共享文件夹不能用之一例
  13. include 头文件循环引用问题
  14. 2分钟教你部署2048小游戏到云服务器
  15. Mongodb-WeAdmin基于SpringBoot实现的Mongodb管理工具
  16. office修复找不到msi_Microsoft Office安装程序找不到ProPlus.WW\ProPlusWW.msi
  17. 服务器1U和2U参数详解
  18. windows自定义屏幕大小,分辨率大小,自定义电脑屏幕分辨率
  19. ORBSLAM2论文翻译
  20. 颠覆你想象的150个故事(1)

热门文章

  1. Kendall秩相关系数
  2. Skype - 经济有效的P2P电话 [完全免费/轻量级软件]
  3. ORA-02287: 此处不允许序号
  4. PHP多线程SOCKET协议实现微信大屏幕摇一摇互动
  5. ar9331修改flash大小和df、cat /proc/mtd的区别
  6. Office-007 PPT设置默认字体格式
  7. Python:让繁琐工作自动化
  8. msys 和 Cygwin
  9. 搞技术的伯克利和玩跨界的斯坦福,金融科技教育的两种解法
  10. 一个简单的抽奖箱抽幸运会员脚本