【摘要】:Socket编程是网络开发重要的技术。PHP本身提供了强大的Socket编程功能,但多数都是通过PHP扩展模块实现的,这样能够确保通信效率高效及安全。Socket能够穿过指定的监听端口,由守护程序作出响应,PHP通过Socket返回方法取得通信结果,最后关闭连接。这就是整个Socket的简单通信流程。除了可以使用PHP进行Socket通信外,当前流行的HTML 5也将Socket通信定义为其中标准,并命名为Web Socket。
Socket编程是网络开发重要的技术。与传统的HTTP相比,Socket最大的特点是无状态,所以特别适合发送邮件、实时聊天、硬件系统交互等通信应用。PHP在网站开发中有很多应用需要使用Socket,例如SMTP邮件发送、缓存系统、全文搜索、文件上传下载等。
PHP本身提供了强大的Socket编程功能,但多数都是通过PHP扩展模块实现的,这样能够确保通信效率高效及安全。事实上PHP同样也提供了编程接口,允许开发人员直接在PHP代码中调用Socket。ThinkPHP对Socket编程进行了封装,使得编程模式更加适合MVC编程,下面将结合代码进行介绍。
1.Socket扩展类
Socket类是系统内置的一个扩展类,用于方便地实现Socket编程。该类包含了4个成员方法,如下所示。
➢connect:根据构造函数中定义的连接信息连接Socket服务器。
➢write:向Socket服务器写入数据。
➢read:获取Socket服务器数据。
➢disconnect:断开Socket服务器连接,以节省内存资源。
2.使用Socket类
Socket编程与前面介绍的FTP一样,需要绑定监听端口。Socket能够穿过指定的监听端口,由守护程序作出响应,PHP通过Socket返回方法取得通信结果,最后关闭连接。
这就是整个Socket的简单通信流程。为了便于演示,帮助读者掌握Socket应用,笔者编写了一个Socket服务端监听程序,下载地址为http://beauty-soft.net/book/php_mvc/down/socket_cli.html,解压后将得到Windows可执行程序,监听端口为7044,首次使用时需要开放7044端口,如图11-3所示。成功运行后,程序界面如图11-4所示。
图11-3 开放7044端口访问
图11-4 Socket监听程序运行效果(www.chuimin.cn)
需要注意的是,该程序使用C#2.0编写的,Windows XP需要自行安装Net Framework2.0。Windows 7或Windows 8等操作系统已经内置.Net Framework,不需要安装。接下来就可以在PHP中发起Socket连接请求,完成Socket的常规操作了,例如上传数据、获取数据等。
(1)上传数据
上传数据使用write方法,该方法只有一个参数,即上传数据,如以下代码所示。
数据上传完成后,服务监控端会实时显示上传的数据,如图11-5所示。
图11-5 Socket通信
(2)获取数据
同样可以使用read方法获取服务端回传的数据,由于B/S模式的关系,在PHP中获取Socket服务端数据需要用户主动刷新才能够成功获取。如以下代码所示。
可以看到,B/S应用并不适合做Socket双向实时通信的应用。事实上PHP开发Socket通常只需要客户端向服务端单向通信即可。
前面的操作只是演示Socket通信,没有任何实际功能。在真实生产环境中,开发人员可以在服务监控端完成实际功能(Linux下可以使用PHP编写守护脚本)。当然,现在很多开源的服务端都是基于Socket来通信的,不需自行编写。例如后面将介绍的Sphinx、Redis等,开发人员只需要根据软件开发者提供的Socket通信协议完成相关调用即可。
除了可以使用PHP进行Socket通信外,当前流行的HTML 5也将Socket通信定义为其中标准,并命名为Web Socket。Web Socket比PHP Socket拥有更丰富的特性,感兴趣的读者可以参阅相关HTML 5资料。
相关推荐