0

0

使用php来实现网络服务

php中文网

php中文网

发布时间:2016-06-13 12:22:17

|

1221人浏览过

|

来源于php中文网

原创

作者:samisa
以下文中的翻译名称对照表 :
payload: 交谈内容
object: 实例
function: 函数
使用 php来实现网络服务
使用框架: WSO2 WSF/PHP
安装环境: windows 或者 linux
(厌恶于眼下计算机文章夹杂无数难懂的翻译以及术语,此处尽量使用口语以及汉语。)
WSMessages 类:
在调用网络服务的过程中,需要两个消息,发送的消息和接受的消息,又来有往方能来往不是。 WSMessages 这个类就是在 Web services framework for php (简称 WSF)这个开源框架中,用来封装这两个消息的类。
WSMessages 有一个很重要的变量 str来保存消息内容,以 xml格式来保存“有效的载荷” (他们把这个叫做 payload,我查英文字典,就是这个意思,但是它来回的出现,反复的出现,今观之,也就是交谈内容,实际上就是除去那些 xml的定义,以及一些其他的所谓‘命名空间' ->namespace的定义而已。要搞清楚什么是命名空间,请查看 xml的 W3C定义 )。有效载荷实在是莫名其妙,我以后还是用‘交谈内容'来指代它把。
如果你通过客户程序发送一个请求,那么你需要构造一个 WSMessage 的实例,并且用 xml形式的交谈内容填写好这个实例。对应请求的回应,也还是一个‘交谈内容'会通过你的程序返回,并且返回的东西也仍然是一个 WSMessage 实例。
也就是说,你的客户端函数掉应一个网络服务,那么他的返回值也是一个 WSMessage 实例。
你可以在一个函数中发送请求,调用网络服务的程序,并且把返回内容放在 WSMessage实例中,并且让函数返回这个 WSMessage实例。
WSMessage 更倾向于发送和接受比较复杂的内容比如有附件什么的。下面就来详细解释一下如何使用 WSMessage 来实现客户端和服务端的交流。
处理交谈内容:
在此之前已经讲解过如何使用 php来创建网络服务,并且已经做了一个简单的客户 -服务端程序来说明工作流程。但是这些程序并没有深入的解释我们怎么处理‘交谈内容'。换句话来说,我们只是把 xml格式的交谈内容发送到了服务端,但并没有想到去处理它。在这里,我们来详细的解释一下如何处理交谈内容并且把它用到计算程序中去。
交谈内容是一个商业逻辑定义的内容,并且用 SOAP( Simple Object Access Protocol)来封装的,(请参见 SOAP w3c的文章)。让我们用个例子来说明如何计算一个阶乘吧。
客户端需要发送的交谈内容:

6

服务端需要明白这个交谈内容并且把变量分辨出来并且计算它的阶乘。下面就是服务端程序:
function getFactorial ( $message ) {
$simplexml = new SimpleXMLElement ( $message -> str ) ;
$value = $simplexml -> param [ 0 ] ;
$result = factorial ( $value ) ;
$responsePayloadString =
$result

XML;
return $responsePayloadString ;
}
第 3行,我们用输入的‘交谈内容'创建了一个 simpleXmlElement 的实例。你可以看到,输入的交谈内容被保存到了通过函数参数传递进来的 WSMessage 实例 $message的 str变量中。注: SimpleXml是一个 php的扩展,用于处理 xml文件或者字符串。 WSO2 WSF/PHP并没有规定我们必须使用哪一个 php扩展来处理 xml。你可以使用你喜欢的人和 xml php 扩展来处理,比如 domdocument, saxdom之类。
第 4行将交谈内容中的参数值提取出来,这表示服务程序需要知道如何理解这些参数,比如说参数类型之类的东西。(正常来说需要在交谈内容中说明这个参数的类型)。函数中剩下的就是正常的处理阶乘。在第六行,阶乘通过调用其他函数被计算出来。从 8到 12行,回复的交谈内容也被写好并且准被返回此内容。第 14行我们返回回复的交谈内容。
回复的交谈内容应该差不多是这样的:

720

同样的,客户端也可以用同样的方法处理回复的交谈内容:
$response = $client -> request ( $reqestPayloadString ) ;
$simplexml = new SimpleXMLElement ( $response -> str ) ;
echo "Result = " . $simplexml -> result [ 0 ] . "
" ;
在第 3行,用回复的交谈内容创建了一个 SimpleXMLElement 实例。同样的 $response 也是一个 WSMessage的实例,我们可以访问他的成员变量 str,这个变量保存了 xml格式的回复的交谈内容。我们把它交给一个 SimpleXMLElement 构造函数,由此创建一个 SimpleXMLElement的实例。然后我们就可以访问结果元素 (或者叫节点? element, xml里面可以称之为元素,但对于树状结构的它来说,节点也不为过? )
现在你应该学会如何处理交谈信息中的内容,不管是客户端的申请也好还是服务端的回应也好。
注:在服务端的 getFactorial函数 (14行 ),你可以之间返回一个 WSmessage而不是一个回复的交谈内容。你可以用下面的这一小段程序来实现这个功能。
$outMessage = new WSMessage( $responsePayloadString );
return $outMessage ;
这其实也就是说服务端程序及可以返回 xml格式的交谈内容也可以返回 WSMessage的实例
完整的程序将在这篇文章的末尾附上。
跟踪消息
通过 WSO2 Web services framework for PHP ,你可以跟踪 SOAP消息被客户端发出,然后客户端又收到了来自服务端的消息,(即他们的交谈内容)。网络客户服务类, WSClient 有两个函数可以实现这个目的: getLastReauest()和 getLastResponse()。客户端在使用 request()这个函数以后,你可以通过这两个函数去得到交谈信息。
$response = $client -> request ( $reqestPayloadString ) ;
printf ( "
Request = %s " ,
htmlspecialchars ( $client -> getLastRequest ())) ;
printf ( "
Response = %s " ,
htmlspecialchars ( $client -> getLastResponse ())) ;
以上的程序片段会显示 request()这个函数实现的请求与回复的内容。
实际上,这段程序差不多会输出这样的东西:
Request =

6
Response =
720

跟踪 SOAP消息对于研究呼叫的服务是非常有用的,特别是对于查找服务和客户端的 bug。比如说,你可以确认所有的客户端发出的消息以及服务端回复的消息,并且,你可以确认交谈内容的格式 (客户端的以及服务端的。 )
Debugging(这个词是如此的普遍,那么我在这里就不翻译它了,尽管我的梦想是有一天程序用中文来写,显而易见的是这个梦已经离我们越来越遥远。 )
用户在使用 php WSF有时会碰到两个问题:
安装 wsf。 你怎么能确定这个 wsf已经正常工作了?好吧,第一,你可以通过 phpinfo()这个函数来检查, (要是你不知道这个函数以及怎么使用它,呃,查查 php手册吧。 ) 你只需要创建一个 php文件,并且在上面写下这几句话,然后用个浏览器打开它。
phpinfo () ;
?>
如果所有的扩展都被正确的安装的话,你会找到一个项目叫 wsf,在一个以 wsf作为标题的表里,你应当看到 'wsf support'之类的字样。这个东东是在 php.ini里定义的,(或者比如说我就没有在 php.ini 里面定义而是在 /etc/php5/conf.d/里写了一个新的文件叫做 wsf.ini,实际上这个文件夹里面所有的文件到后来都会被合并到 php.ini里,所有如果你没有在 php.ini里找到相应的设置但是你的 wsf缺能用,你不妨来这里看看。 )
如果这个扩这没有显示在 phpinfo里,那么你需要去找安装指南来好好研究一下,如果找不到可以给我发 email: ferdinandfly@yahoo.ca
当你成功的安装了以后,第二个问题就是你好像并不能让这个例子正确运行。同样的,你需要检查一些设置是否正确。 首先是 php.ini记录中,经常会设置一些日志文件的路径,也许他不存在或者是说他设定的路径 php5无法读写。还有,你应到确认 php.ini是否包含了一些脚本文件,而这些脚本文件都是可读的。
如果以上的这些都是正确的但是 wsf就是不干活,你可以查看一下日志文件。日志文件会被写到 wsf.log_path这条记录所确定的路径中。这个东东在 php.ini里进行设定。如果他没有被设定,那么 log就在 /tmp里( linux)。需要知道的是,在 windows平台中,默认的路径很可能不存在,因此你必须为他指定一个日志路径。和服务有关的日志记录在 wsf_php_server.log中,和客户端有关的保存在 wsf_php_client.log中,如果你的客户机和服务主机不是一台机器,那么这两个文件都在服务器上哦。你可以通过调节记录的等级来获得不同详细程度的日志文件。如果是调试,你可以把它设置为 level 4,当然如果是成熟的软件,你可以设置为 0(仅仅是严重错误)或者是 1(错误)。
如果你想确认来往的交谈内容( SOAP)是你所想要的格式的话,你可以用 SOAP 消息跟踪来调试,正如我们前面所讲的。
总结:
在这篇文章中,我解释了 WSMessage这个类以及怎样处理交谈内容并且使用它,客户端或者服务端都可以通过调用 str这个 WSMessage的成员变量来获得交谈内容( xml)。通常交谈内容的格式都是通过 WSDL来定义的,因此我们要求客户端和服务端需要遵守同样的格式是合理的。下一章我们会讨论如何通过 WSO2 WSF/PHP和 WSDL协同工作 .

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

16

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

23

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

75

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

95

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

218

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

420

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

168

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

222

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

33

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 13.2万人学习

CSS3 教程
CSS3 教程

共18课时 | 7万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号