PHP异步调用socket简单实例

 更新时间:2016年11月25日 16:24  点击:2082
文章利用了socket来实现异步调用哦,有需要学习socket的朋友可以参考一下本文章以及参考资料哦。
 代码如下 复制代码

<?
 $host = "www.111cn.net";
 $path = "/Report.php?ReportID=1";
 $cookie = Session_id();
 
 $fp = fsockopen($host, 80, $errno, $errstr, 30);
 if (!$fp) {
    print "$errstr ($errno)<br />n";
    exit;
 }
 $out = "GET ".$path." HTTP/1.1rn";
 $out .= "Host: ".$host."rn";
 $out .= "Connection: Closern";
 $out .= "Cookie: ".$cookie."rnrn";
 
 fwrite($fp, $out);  //将请求写入socket
 //也可以选择获取server端的响应
 /*while (!feof($fp)) {
     echo fgets($fp, 128);
 }*/
 //如果不等待server端响应直接关闭socket即可
 fclose($fp);
 ?>

更详细关于php socket可以参考

http://www.111cn.net/phper/30/7cadb3c9195ac7d8ac9104da61a25c6e.htm

文章介绍了一个关于discuz X的单件模式原创文章,PPC高亮插件太不友好了,我直接贴txt内容都会有奇奇怪怪问题发生。

X的只要文件开头都有这么一句话

 代码如下 复制代码

$discuz = & discuz_core::instance();
[code language=php]

 

// instance()属于discuz_core类在class_core.php
function &instance() {
static $object;
if(empty($object)) {
  $object = new discuz_core();
}
return $object;
}
[/code]
这里保证单词请求都运用一个discuz_core实例。这里的&写法是为了兼容PHP4的,如果在PHP5中,则可以使用static。
[code language=php]
//这里是单件模式的简单例子。
class PHPig {
private static $v = null;
static function instance() {
  if(self::$v == null) {
   self::$v = new PHPig();
  }
  return self::$v;
}
}
$pig1 = PHPig::instance();
$pig2 = PHPig::instance();
if($pig1 === $pig2) {
echo '同一个对象';
} else {
echo '不是同一个对象';
}
[/code]

PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止。简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数。
 代码如下 复制代码

<?php
 ignore_user_abort(true);
 set_time_limit(0);
 
 while(1) {
   $fp  = fopen('time_task.txt',"a+");
   $str = date("Y-m-d h:i:s")."nr";
   fwrite($fp,$str);
   fclose($fp);
   sleep(5);    //半小时执行一次
 }
 ?>


定义和用法
ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。

本函数返回 user-abort 设置的之前的值(一个布尔值)。

语法
ignore_user_abort(setting)参数 描述
setting 可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行。

如果未设置该参数,会返回当前的设置。
 
提示和注释
注释:PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止。简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数。

 

这里有一篇文章大家可以参考一下

http://www.111cn.net/phper/php/php-ignore_user_abort.htm

本文章介绍了一个简单的关于php入门篇-缓存技术简单应用,有需要的朋友可以看看哦,这里是利用了ob_start(); ob_end_flush(); 来实例的。
 代码如下 复制代码

<?php
// define the path and name of cached file
$cachefile = 'cached-files/'.date('M-d-Y').'.php';
// define how long we want to keep the file in seconds. I set mine to 5 hours.
$cachetime = 18000;
// Check if the cached file is still fresh. If it is, serve it up and exit.
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
include($cachefile);
exit;
}
// if there is either no file OR the file to too old, render the page and capture the HTML.
ob_start();
?>
<html>
output all your html here.
</html>
<?php
// We're done! Save the cached content to a file
$fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
// finally send browser output
ob_end_flush();
?>
本文章要介绍了这篇文章是一篇关于php流下载,就是可以支持分块与断点续传文件下载,有需要的朋友可以看看。
 代码如下 复制代码

 

$dowmFile = dirname ( __FILE__ ) . '/Nokia - Always Here.mp3'; //要下载的文件,绝对或相对
$dowmName = 'Nokia - Always Here.mp3';
ob_start ();
getlocalfile ( $dowmFile, $dowmName );
flush ();
ob_flush ();
function getlocalfile($fname, $filename = '') {
  $fsize = filesize ( $fname );
  header ( 'Cache-Control: public' );
  header ( 'Pragma: public' );
  header ( 'Accept-Ranges: bytes' );
  header ( 'Connection: close' );
  header ( 'Content-Type: ' . MIMEType ( $fname ) );
  //header('Content-Type: application/octet-stream');
  if (isset ( $filename {0} )) {
    header ( 'Content-Disposition: attachment;filename=' . $filename );
  }
  if ($fp = @fopen ( $fname, 'rb' )) {
    $start = 0;
    $end = $fsize;
    $isRange = isset ( $_SERVER ['HTTP_RANGE'] ) && ($_SERVER ['HTTP_RANGE'] != '');
    if ($isRange) {
      preg_match ( '/^bytes=([0-9]*)-([0-9]*)$/i', $_SERVER ['HTTP_RANGE'], $match );
      $start = $match [1];
      $end = $match [2];
      $isset_start = isset ( $start {0} );
      $isset_end = isset ( $end {0} );
      if ($isset_start && $isset_end) {
        //分块下载
        if ($start >= $fsize || $start < 0 || $start > $end) {
          $start = 0;
          $end = $fsize;
        } else if ($end >= $fsize) {
          $end = $fsize - $start;
        } else {
          $end -= $start - 1;
        }
      } else if ($isset_start && ! $isset_end) {
        //指定位置到结束
        if ($start >= $fsize || $start < 0) {
          $start = 0;
          $end = $fsize;
        } else {
          $end = $fsize - $start;
        }
      } else if (! $isset_start && $isset_end) {
        //最后n个字节
        $end = $end > $fsize ? $fsize : $end;
        $start = $fsize - $end;
      } else {
        $start = 0;
        $end = $fsize;
      }
    }
    if ($isRange) {
      fseek ( $fp, $start );
      header ( 'HTTP/1.1 206 Partial Content' );
      header ( 'Content-Length: ' . $end );
      header ( 'Content-Ranges: bytes ' . $start . '-' . ($end + $start - 1) . '/' . $fsize );
    } else {
      header ( 'Content-Length: ' . $fsize );
    }
    if (function_exists ( 'fpassthru' ) && ($end + $start) == $fsize) {
      fpassthru ( $fp );
    } else {
      echo fread ( $fp, $end );
    }
  } else {
    header ( 'Content-Length: ' . $fsize );
    readfile ( $fname );
  }
  //@header("Content-Type: ".mime_content_type($fname));
}
function MIMEType($fname) {
  $fileSuffix = strtolower ( substr ( $fname, strrpos ( $fname, '.' ) + 1 ) );
  switch ($fileSuffix) {
    case 'avi' :
      return 'video/msvideo';
    case 'wmv' :
      return 'video/x-ms-wmv';
    case 'txt' :
      return 'text/plain';
    case 'htm' :
    case 'html' :
    case 'php' :
      return 'text/html';
    case 'css' :
      return 'text/css';
    case 'js' :
      return 'application/javascript';
    case 'json' :
    case 'xml' :
    case 'zip' :
    case 'pdf' :
    case 'rtf' :
    case 'tar' :
      return 'application/' . $fileSuffix;
    case 'swf' :
      return 'application/x-shockwave-flash';
    case 'flv' :
      return 'video/x-flv';
    case 'jpe' :
    case 'jpg' :
      return 'image/jpeg';
    case 'jpeg' :
    case 'png' :
    case 'gif' :
    case 'bmp' :
    case 'tiff' :
      return 'image/' . $fileSuffix;
    case 'ico' :
      return 'image/vnd.microsoft.icon';
    case 'tif' :
      return 'image/tiff';
    case 'svg' :
    case 'svgz' :
      return 'image/svg+xml';
    case 'rar' :
      return 'application/x-rar-compressed';
    case 'exe' :
    case 'msi' :
      return 'application/x-msdownload';
    case 'cab' :
      return 'application/vnd.ms-cab-compressed';
    case 'aif' :
      return 'audio/aiff';
    case 'mpg' :
    case 'mpe' :
    case 'mp3' :
      return 'audio/mpeg';
    case 'mpeg' :
    case 'wav' :
    case 'aiff' :
      return 'audio/' . $fileSuffix;
    case 'qt' :
    case 'mov' :
      return 'video/quicktime';
    case 'psd' :
      return 'image/vnd.adobe.photoshop';
    case 'ai' :
    case 'eps' :
    case 'ps' :
      return 'application/postscript';
    case 'doc' :
    case 'docx' :
      return 'application/msword';
    case 'xls' :
    case 'xlt' :
    case 'xlm' :
    case 'xld' :
    case 'xla' :
    case 'xlc' :
    case 'xlw' :
    case 'xll' :
      return 'application/vnd.ms-excel';
    case 'ppt' :
    case 'pps' :
      return 'application/vnd.ms-powerpoint';
    case 'odt' :
      return 'application/vnd.oasis.opendocument.text';
    case 'ods' :
      return 'application/vnd.oasis.opendocument.spreadsheet';
    default :
      if (function_exists ( 'mime_content_type' )) {
        $fileSuffix = mime_content_type ( $filename );
      } else {
        $fileSuffix = 'application/octet-stream';
      }
      return $fileSuffix;
      break;
  }
}

[!--infotagslink--]

相关文章

  • c# socket网络编程接收发送数据示例代码

    这篇文章主要介绍了c# socket网络编程,server端接收,client端发送数据,大家参考使用吧...2020-06-25
  • 详解JS WebSocket断开原因和心跳机制

    这篇文章主要介绍了JS WebSocket断开原因和心跳机制,对websocket感兴趣的同学,可以参考下...2021-05-08
  • 深入分析C#中的异步和多线程

    这篇文章主要介绍了C#中异步和多线程的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2021-01-16
  • C#多线程与异步的区别详解

    多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别...2020-06-25
  • C#实现Socket通信的解决方法

    这篇文章主要介绍了C#实现Socket通信的解决方法,需要的朋友可以参考下...2020-06-25
  • 详解C# Socket异步通信实例

    本篇文章主要介绍了C# Socket异步通信,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C# Socket的TCP通讯的实例代码

    本篇文章主要介绍了C# Socket的TCP通讯,socket通讯方式有两种:同步和异步,详细的介绍了这两种方法,有兴趣的可以了解一下。...2020-06-25
  • JS异步的执行原理和回调详解

    这篇文章主要给大家介绍了关于JS异步的执行原理和回调的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-08
  • python使用socket高效传输视频数据帧(连续发送图片)

    本文主要介绍了python使用socket高效传输视频数据帧(连续发送图片),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-23
  • C#异步调用的好处和方法分享

    我们要明确,为什么要进行异步回调?众所周知,普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了...2020-06-25
  • c# winform异步不卡界面的实现方法

    这篇文章主要给大家介绍了关于c# winform异步不卡界面的实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • C语言中send()函数和sendto()函数的使用方法

    这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • JS如何实现基于websocket的多端桥接平台

    我们在调试过程使用的工具有:modheader,postman等,但这些工具都会存在的问题:缺少客户端里相应的设备信息;即使将cookie信息复制出来,也是存在过期的问题;多个设备之间切换时不方便;针对这些存在的问题,我基于websocket双向通信的特点,实现了多端桥接管理平台...2021-05-15
  • JQuery基于FormData异步提交数据文件

    这篇文章主要介绍了JQuery基于FormData异步提交数据文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-02
  • C# 实现WebSocket服务端教程

    这篇文章主要介绍了C# 实现WebSocket服务端教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-08
  • C# Socket编程实现简单的局域网聊天器的示例代码

    这篇文章主要介绍了C# Socket编程实现简单的局域网聊天器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)

    ECharts地图主要用于地理区域数据的可视化,展示不同区域的数据分布信息,通过本文给大家介绍如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据,需要的朋友参考下吧...2016-02-26
  • JQuery异步提交表单与文件上传功能示例

    这篇文章主要介绍了JQuery异步提交表单与文件上传功能,结合实例形式分析了jQuery表单提交及文件传输操作的相关实现技巧,需要的朋友可以参考下...2017-01-16
  • 一篇文章带你使用SpringBoot基于WebSocket的在线群聊实现

    这篇文章主要介绍了一篇文章带你使用SpringBoot基于WebSocket的在线群聊实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-08
  • C#异步的世界(下)

    这篇文章主要介绍了C#异步的世界(下),对异步感兴趣的同学,可以参考下...2021-04-26