浅析PHP Socket技术


Posted in PHP onAugust 02, 2013

phpsocketSocket位于TCP/IP协议的传输控制协议,提供客户-服务器模式的异步通信,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的反馈或服务!我练习了一个最基本的例子:

使用并发起一个阻塞式(block)连接,即服务器如果不返回数据流,则一直保持连接状态,一旦有数据流传入,取得内容后就立即断开连接。代码如下:

<?php
$host = www.sohu.com; //这个地址随便,用新浪的也行,主要是测试用,哪个无所谓
$page = "/index.html";
$port = 80;
$request = "GET $page HTTP/1.1\r\n";
$request .= "Host: $host\r\n";
//$request .= "Referer:$host\r\n";
$request .= "Connection: close\r\n\r\n";
//允许连接的超时时间为1.5秒
$connectionTimeout = 1.5;
//允许远程服务器2秒钟内完成回应
$responseTimeout = 2;
//建立一个socket连接
$fp = fsockopen($host, $port, $errno, $errstr, $connectionTimeout);
if (!$fp) {
    throw new Exception("Connection to $hostfailed:$errstr");
} else {
    stream_set_blocking($fp, true);
    stream_set_timeout($fp, $responseTimeout);
}
//发送请求字符串
fwrite($fp, $request);
//取得返回的数据流内容
$content = stream_get_contents($fp);
echo $content;
$meta = stream_get_meta_data($fp);
if ($meta['timed_out']) {
    throw new Exception("Responsefrom web services server timed out.");
}
//关闭Socket连接
fclose($fp);
?>
PHP 相关文章推荐
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
jQuery 源码分析笔记
May 25 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
Feb 16 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
php递归法读取目录及文件的方法
Jan 30 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP实现的回溯算法示例
Aug 15 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
详解PHP中的8个魔术常量
Jul 06 PHP
php中如何防止表单的重复提交
Aug 02 #PHP
浅析51个PHP处理字符串的函数
Aug 02 #PHP
php中的常用魔术方法总结
Aug 02 #PHP
深入解析Session是否必须依赖Cookie
Aug 02 #PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 #PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 #PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 #PHP
You might like
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
pytyon 带有重复的全排列
2013/08/13 Python
Python文件操作类操作实例详解
2014/07/11 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
python如何读写csv数据
2018/03/21 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
Django异步任务线程池实现原理
2019/12/17 Python
解决c++调用python中文乱码问题
2020/07/29 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
大学生个人求职口试自我评价
2014/02/16 职场文书
和睦家庭事迹
2014/05/14 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers