码迷,mamicode.com
首页 > 其他好文 > 详细

记一次socket_create()函数耗时异常记录

时间:2017-07-28 20:53:40      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:color   rip   miss   代码   ast   服务器端   参数   丢失   inpu   

技术分享

 

背景:

     下午开发时突然整个页面耗时增加,空接口每次都需要2-3秒的耗时,一开始以为连开发环境数据库出现问题,最后断开数据库跑,发现还是很慢

最终逐步调试此页面耗时,定位到了socket_create()此函数上面,这个函数主要用在发送udp监控日志,但是创建socket连接时socket_create()的第三个参数出现了问题

改过后的方式:

$sock = socket_create(AF_INET, SOCK_DGRAM, 1);

先看下php官网的解释此函数的
http://www.php.net/manual/zh/function.socket-create.php

socket_create

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

socket_create — 创建一个套接字(通讯节点)

说明 ?

resource socket_create ( int $domain , int $type , int $protocol )
创建并返回一个套接字,也称作一个通讯节点。一个典型的网络连接由 2 个套接字构成,一个运行在客户端,另一个运行在服务器端。

 

$domain =  AF_INET ; //AF_INET IPv4 网络协议。TCP 和 UDP 都可使用此协议。

$type = SOCK_DGRAM ; //提供数据报文的支持。(无连接,不可靠、固定最大长度).UDP协议即基于这种数据报文套接字。

$protocol  = 0;//icmp Internet Control Message Protocol 主要用于网关和主机报告错误的数据通信。例如“ping”命令(在目前大部分的操作系统中)就是使用 ICMP 协议实现的。

$protocol  = 1;//udp User Datagram Protocol 是一个无连接的、不可靠的、具有固定最大长度的报文协议。由于这些特性,UDP 协议拥有最小的协议开销。

$protocol  = 2;//tcp Transmission Control Protocol 是一个可靠的、基于连接的、面向数据流的全双工协议。TCP 能够保障所有的数据包是按照其发送顺序而接收的。如果任意数据包在通讯时丢失,TCP 将自动重发数据包直到目标主机应答已接收。因为可靠性和性能的原因,TCP 在数据传输层使用 8bit 字节边界。因此,TCP 应用程序必须允许传送部分报文的可能。

 

之前协议$protocol一直填的是0,直到今天目标机器关机以后,一直连不上,改了一下协议为1,耗时恢复正常

下附代码:

 

    /**
     * 发送udp数据
     * @param type $input 发送的数据
     * @param type $server 发送的服务器
     * @param type $port 发送的端口
     * @return boolean      发送成功与否
     */
    static function UdpSend($input, $server = "test1.mopon.cn", $port = 8125)
    {
        try {
            //创建一个socket
            $sock = socket_create(AF_INET, SOCK_DGRAM, 1);

            //发送数据到这个socket
            socket_sendto($sock, $input, strlen($input), 0, $server, $port);

            //关闭创建的socket
            socket_close($sock);

            //返回
            return true;
        } catch (\Exception $e) {
            $errorCode = socket_last_error();
            $errorMsg  = socket_strerror($errorCode);

            Log::error("Could not send data: [$errorCode] $errorMsg \n");

            return false;
        }

    }

 

 

 

记一次socket_create()函数耗时异常记录

标签:color   rip   miss   代码   ast   服务器端   参数   丢失   inpu   

原文地址:http://www.cnblogs.com/liugx/p/7252385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!