JSON

使用 XMPP 构建一个基于 web 的通知工具(4)

字号+ 作者:H5之家 来源:H5之家 2016-07-11 17:00 我要评论( )

根据本教程的演示目的,您将只需使用在这里创建的两个用户。但是,如果您希望在您的应用程序中支持复杂的每用户通知,那么您需要能够以编程方式从您的应用程序的 PHP 部分添加和移除用户。Openfire 的 User Service

根据本教程的演示目的,您将只需使用在这里创建的两个用户。但是,如果您希望在您的应用程序中支持复杂的每用户通知,那么您需要能够以编程方式从您的应用程序的 PHP 部分添加和移除用户。Openfire 的 User Service 插件通过一个用于 XMPP 用户管理的 REST 界面向您提供这个功能。要安装这个插件,从 Openfire 插件站点(参见 )下载它。插件本身是单个文件:userservice.jar。您必须将其放置到您的 Openfire 安装的 /plugins 目录中。

使用您建立的管理员凭证登录到管理屏幕。单击 Edit Properties(位于 Server ports 下方),记录列示的服务器名称。这个名称将形成您的 JIDs 的域部分。这个名称是不可互换的,比如,不能使用 localhost 替代 127.0.0.1,反之也不行。

单击顶部导航菜单中的 Users/Groups 并创建两个新用户。这些用户将您在开发过程中的测试用户。

单击 Server settings,然后单击 Offline messages。由于您将 XMPP 用于界面通知,因此应将 Offline Message Policy 设置为 Drop,如 图 4 所示。您不想保存用户没有登录时收到的消息,否则,当他们返回时,可能会被数千条通知所 “淹没”。

图 4. 丢弃离线消息

配置向导的屏幕截图,显示 Offline Messages 屏幕,其中 Drop 单选按钮选中

在 Server settings 中,单击 Server to Server。对于本文,您不必连接到外部服务器,因为您不需要作为更大的 XMPP 网络的一个连接部分操作。因此,将 Service Enabled 设置为 Disabled,Allowed to Connect 设置为 White List。这些设置将阻止未授权的连接造成破坏。

配置 Apache 以通过 BOSH 转发 XMPP

Openfire 在 :7070/http-bind 维护了一个 HTTP 绑定 URL,以便通过 BOSH 访问。要在端口 80 上使用这个 URL,您必须配置 Apache HTTP Server 以将一个 URL 转发到这个位置。为此,您需要启动代理模块。

打开您的 http.conf Apache 配置文件并找到 mod_proxy.so 和 mod_proxy_http.so 的 LoadModule 条目,它们默认被注释掉。移除前导的井字符(#),取消注释。这个配置文件的 Dynamic Shared Object (DSO) Support 部分中的多个适当的行(不一定在一起)现在应该类似于 :

清单 8. 启用 Apache HTTP Server 中的代理支持

LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_module modules/mod_proxy.so

在配置文件的末尾,添加 中的行(如果您没有将 locahost 作为您的测试服务器环境,则应将 127.0.0.1 替换为您的服务器 IP 地址):

清单 9. httpd.cof 中的 XMPP 代理规则

# XMPP proxy rule ProxyRequests Off ProxyPass /xmpp-httpbind :7070/http-bind/ ProxyPassReverse /xmpp-httpbind :7070/http-bind/

注意,在 中,您在端口 80 上使用了一个稍微不同的 URL:/xmpp-httpbind。这个 URL 是 strophe.js(您稍后将用到的客户端 JavaScript 框架)分配给一个用于设置 BOSH 端点的变量的值。

重启服务器。现在,您可以开始编写使用 XMPP 的 web 应用程序了。

创建使用 XMPPHP 的服务器应用程序

在前面的小节中,您设置了服务器和插件。在本小节中,您将创建您的实时应用程序的服务器端部分。

服务器端功能

您的应用程序的 PHP 端将执行以下两个主要任务:

XMPPHP 是应用最广泛的针对 PHP 的 XMPP 库。与 ejabberd 和 Openfire 一样,它也是免费和开源的,因此它是首次使用 XMPP 开发人员的一个不错的起点。

下载 XMPPHP(参见 )。解包这个归档并将其插入您的新项目的 lib/xmpphp 子文件夹中。

最后,为节约您的 RSS 提要的解析时间,下载并安装 Last RSS PHP 解析器(参见 )。

存储服务器端设置

您将使用此前创建的两个测试用户之一作为您的通知发送方。在您的 /pingstream 的根中创建一个名为 config.inc.php 的文件,并添加 中的内容:

清单 10. 服务器端配置设置

<?php // Pingstream configuration file // Define global $CONFIG array - don't change this! global $CONFIG; $CONFIG = array(); $CONFIG['send'] = new stdClass(); // Set account details for sending party $CONFIG['send']->user = 'testuser'; // User portion of JID $CONFIG['send']->host = '127.0.0.1'; // Host portion of JID $CONFIG['send']->resc = 'pingstream';// Resource portion of JID $CONFIG['send']->pass = 'mypass'; // Password for user

config.inc.php 文件还必须包含关于您的接收方的细节,如 所示:

清单 11. 关于接收方的细节

// Set the receiving account details $CONFIG['receive'] = 'receivinguser@127.0.0.1';

您还需将少量数据缓存在一个文件中,因此 config.inc.php 需要包含一个可写入的文件路径,如 所示:

清单 12. 设置存储临时文件的位置

// Full path to your cache directory, with trailing slash $CONFIG['cachedir'] = '/tmp/';

如果您位于一台 Microsoft® Windows® 机器上,那么您可以将这个位置设置为一个空字符串。否则,确保您指定的目录包含一个完整路径和一个结束斜杠,并被设置为全局可写入(world-writeable)。

定义数据源

您的 Pingstream 应用程序将检查 IBM developerWorks Web development 专区提要获取更新,因此,将 中的内容添加到 config.inc.php:

清单 13. 检查一个 developerWorks 提要获取更新

// Set the RSS feed you're going to check $CONFIG['rss'] = 'http://www.ibm.com/developerworks/views/web/rss/libraryview.jsp';

现在,创建另一个新文件:/lib.inc.php。这将是您的库文件,包含在您的应用程序的主控制器页面和用户界面页面中。

lib.inc.php 的顶端必须引用 config.inc.php(主 XMPPHP 库)和 lastRSS,如 所示:

清单 14. 加载必要的库

<?php // Load libraries require_once('XMPPHP/XMPP.php'); require_once('config.inc.php'); require_once('lastRSS.php');

接下来,您将创建一个函数来通过 XMPP 将一条消息发送到客户端。通过 XMPPHP 完成这个任务很简单,只需使用在您的配置文件中保存的凭证建立一个连接,发送消息,然后关闭连接。

在这个函数的第一部分中,您创建了一个新的 XMPPHP_XMPP 对象,如 所示:

清单 15. 创建一个新的 XMPP 连接对象

// Load configuration global $CONFIG; $conn = new XMPPHP_XMPP( $CONFIG['connect']->host, 5222, $CONFIG['connect']->user, $CONFIG['connect']->pass, $CONFIG['connect']->resc);

注意,XMPPHP 通过 XMPP 通信的默认端口 5222 连接到您的 XMPP 服务器。尽管您的客户端通信需要使用 BOSH,但服务器端没有这个要求。

要连接到 XMPP 服务器,需要发送一个初始连接请求,一直等到接收到您的 XMPP 会话已经启动的通知,然后发送一个联机状态节来声明您处于在线状态(参见 ):

清单 16. 建立一个 XMPP 连接

$conn->connect(); $conn->processUntil('session_start'); $conn->presence();

下一步是发送消息本身,该消息已被预先填充到一个名为 $message 的变量中(参见 ):

清单 17. 发送消息

$conn->message($CONFIG['receive'], $message);

然后您使用 $conn->disconnect(); 断开连接。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
r