标签: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; } }
标签:color rip miss 代码 ast 服务器端 参数 丢失 inpu
原文地址:http://www.cnblogs.com/liugx/p/7252385.html