实现方法如下:

使用到的相关函数: socket_createsocket_set_blocksocket_bindsocket_listensocket_acceptsocket_readsocket_write,这些函数具体参数说明在PHP文档上写很详细,这里就不再赘述,这里只是介绍服务端如何处理请求。

具体实例:

//确保在连接客户端时不会超时
set_time_limit(0);
//设置IP和端口号
$address = "127.0.0.1";
$port = 54321;
$socketServer = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() fail:" . socket_strerror(socket_last_error()) . "/n");
//设置为阻塞模式
socket_set_block($socketServer) or die("socket_set_block() fail:" . socket_strerror(socket_last_error()) . "/n");
//绑定端口
$result = socket_bind($socketServer, $address, $port) or die("socket_bind() fail:" . socket_strerror(socket_last_error()) . "/n");
//开始监听
$result = socket_listen($socketServer, 4) or die("socket_listen() fail:" . socket_strerror(socket_last_error()) . "/n");
 
do {
 //接收连接请求并返回一个子Socket来处理客户端和服务器间的信息
 $sock = socket_accept($socketServer) or die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");
 while($sock){
  //读取客户端数据
  echo "Read client data \n";
 
  $length = socket_read($sock, 4);
  $length = unpack('i', $length);
  echo "length:$length[1] \n";
 
  $request = socket_read($sock, $length[1]);
  echo "$request:$request \n";
 
 
  //数据传送 向客户端写入返回结果
  $msg = "this is response message \n";
  $msgLength = strlen($msg);
  $msgLength = pack('i', $msgLength);
  socket_write($sock, $msgLength);
  socket_write($sock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");
  break;
 }
 
} while (true);
socket_close($socketServer);

总结:

在接收到客户端的请求后,可以结合PHP的多线程进行处理,这里只是简单的返回字符串。 各大语言实现socket通信的方式都是大同小异,在服务端的流程都是差不多的。在有现成高性能socket通信框架的情况下,建议不要自己去实现,但是得理解框架底层是怎样实现的。

到此这篇关于用PHP实现的服务端socket具体实例的文章就介绍到这了,更多相关PHP实现的服务端socket内容请搜索乐虎体育以前的文章或继续浏览下面的相关文章希望大家以后多多支持乐虎体育!

用PHP实现的服务端socket具体实例的更多相关文章

  1. PHP中强制类型转换的示例详解

    前言学过静态语言开发的朋友对类型转换不会陌生,比如Java、C#、C++等。静态语言的好处就是变量强制必须指定类型,......

  2. php中数组最简单的使用方法

    我们在说映射的时候,有些小伙伴就会联想到数组,没错,因为数组就是用了映射的思想。这里很多刚学php的小伙伴对概念不是......

  3. PHP设计模式之原型模式示例详解

    前言原型模式其实更形象的来说应该叫克隆模式。它主要的行为是对对象进行克隆,但是又把被克隆的对象称之为最初的原型,于是......

  4. php中PHPUnit框架实例用法

    本期给大家带来的框架是一个单元测试内容,本身不是很难的东西,大家觉得困难,可能是把自己框在了技术上,事实上,并非如此......

  5. php的lavarel框架中join和orWhere的用法

    Laravel是一个开源PHP框架,功能强大且易于理解。它遵循模型 - 视图 - 控制器设计模式(MVC)。Lara......

  6. PHP 非常实用下载远程图片

    /*** 下载远程图片* @param string $url 图片的绝对url* @param string $f......

  7. 原生PHP网页导出和导入excel文件实例

    原生PHP实现的网页导出和导入excel文件实例,包括上传也是用的原生。还可在exportExcel方法里设置字体等......

  8. 用PHP实现的服务端socket具体实例

    实现方法如下:使用到的相关函数: socket_create、socket_set_block、socket_bin......

  9. 关于PHP方法参数的那一些事

    前言在所有的编程语言中,方法或者函数,都可以传递一些参数进来进行业务逻辑的处理或者计算。这没什么可说的,但是在PHP......

  10. php中yum命令用法详解

    在php中关于yum命令还是比较多的,主要是因为在配置linux环境,linux中安装、卸载等各种操作中,因此,掌握......

随机推荐

  1. Python获取Linux系统内存情况

    [Python]代码import subprocessimport rekeydic = {"MemTot......

  2. PHP 非常实用下载远程图片

    /*** 下载远程图片* @param string $url 图片的绝对url* @param string $f......

  3. c#发送请求访问外部接口的实例

    我就废话不多说了,大家还是直接看代码吧~string url = "https://cloud.soei.......

  4. php swoft框架实例用法

    在框架选择上,不少人会觉得swoft才是最强PHP框架,尤其是在常驻内存模式的应用级高性能框架,性能是这一堆页面级框......

  5. java DelayQueue的原理浅析

    在对DelayQueue延迟功能的使用上,很多人不能后完全理解延迟的一些功能使用,这里我们深入来挖掘一下DelayQ......

  6. C# FTP上传下载 代码

    using System; using System.Collections.Generic; using Sy......

  7. SQLServer 使用rand获取随机数的操作

    Rand()函数是系统自带的获取随机数的函数,可以直接运行select rand() 获取0~1之间的float型的......

  8. .NET的并发编程(TPL编程)是什么?

    写在前面优秀软件的一个关键特征就是具有并发性。过去的几十年,我们可以进行并发编程,但是难度很大。以前,并发性软件的编......

  9. 如何编写python的daemon程序

    以前把守护进程与后台任务搞混了,后面看了文章才知道这两者的区别,写此文表达自己对守护进程的理解.1:什么是守护进程?......

  10. sqlserver查询去掉重复数据的实现

    说明:只要数据表“列名”数据相同,则说明是两条重复的数据(ID为数据表的主键自动增长)。推荐使用方法一-- 方法一s......