类别:PHP问题 / 日期:2019-12-02 / 浏览:76 / 评论:0

作为一位非底层程序员,要想深切相识socket的内部完成机制是很难题的,我们只需邃晓socket是一套操纵系统封装好的完成历程通讯的函数,会建立和挪用就够了。

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

因为socket重要面向底层和网络服务开辟,平常服务器端都是用 C 或 Java 等言语完成,如许能更好地操纵底层,对网络服务开辟中碰到的题目(如并发、壅塞等)也有成熟完美的解决方案,而PHP明显不适合这类运用场景。 (引荐进修: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 提交表单数据,代码以下:

<?php
$data = array('comment'=>'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的细致内容,更多请关注ki4网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。