为什么php不适合socket

这篇文章运用简单易懂的例子给大家介绍为什么php不适合socket,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

成都创新互联是一家专注于网站设计制作、成都网站制作与策划设计,康平网站建设哪家好?成都创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:康平等地区。康平做网站价格咨询:18982081108

 作为一名非底层程序员,要想深入了解socket的内部实现机制是很困难的,我们只需明白socket是一套操作系统封装好的实现进程通信的函数,会创建和调用就够了。

PHP的语言特性和自身定位决定了它只适合做socket客户端,而不适合做socket服务器端。

因为socket主要面向底层和网络服务开发,一般服务器端都是用 C 或 Java 等语言实现,这样能更好地操作底层,对网络服务开发中遇到的问题(如并发、阻塞等)也有成熟完善的解决方案,而PHP显然不适合这种应用场景。 

实际上,PHP操作MySQL数据库也是通过socket进行的,这正是由于socket屏蔽了底层的协议,使得网络服务之间的互联互通变得简单。

除了传统的服务器端语言实现的socket外,随着HTML5的流行,浏览器客户端实现的WebSocket也逐渐兴起,对于这一点值得关注,FlashSocket也是一个不错的解决方案。

要在客户端操作socket,可使用fsockopen、socket_create 或 stream_socket_client 等函数实现,如果是PHP5,推荐使用stream_socket_client。

socket交互应用实例:使用socket提交表单

新建一个 test.php 文件,向 http://demo.com/index.php?id=1  提交表单数据,代码如下:

'this is a robot comment');
$data = http_build_query($data);
 
$out = "POST http://demo.com/index.php?id=1 HTTP/1.1\r\n";  // 通过POST方式发送数据
$out .= "Host: demo.com\r\n";
$out .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
$out .= "Content-length: ".strlen($data)."\r\n";
$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0"."\r\n";
$out .= "Connection: close"."\r\n"."\r\n";    // 注意:此处有两个 \r\n
 
$out .= $data."\r\n";   // 正文数据
 
$fp = fsockopen("demo.com", 80, $errno, $errstr, 30);  // 创建socket客户端连接
 
// $fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30);  推荐这种写法
 
fwrite($fp, $out);    // 向服务器发送数据
 
while (!feof($fp)) {
    echo fgets($fp, 1280);    // 读取服务器响应的数据
}
fclose($fp);  // 关闭socket连接
?>

需要注意以下几点:

fsockopen的第一个参数,也可以使用IP地址,不要带 http:// 字符串,除非使用SSL等

请求头(headers)不一定要带上所有的头域,一般只需带上几个核心的header即可

在最后一个header处,即 Connection 后有两个换行

注意编码问题

关于为什么php不适合socket就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


当前文章:为什么php不适合socket
网页链接:http://azwzsj.com/article/gghjdg.html