php之sockets多用户同时访问之io多路复用实现原理!
时间:2019-01-30
本文章向大家介绍php之sockets多用户同时访问之io多路复用实现原理!,主要包括php之sockets多用户同时访问之io多路复用实现原理!使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
server.php服务器端(务必看注释)
<?php
$address = "0.0.0.0";
$port = 8089;
// Create a TCP Stream socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $address, $port) or die('Could not bind to address');
socket_listen($socket);
#把所有的链接状态的socket(非活跃数据socket)加入到队列中!
$comn_sockets[] = $socket;
$write = null;
$except = null;
while (true){
#这里必须拷贝一份$comn_sockets,因为socket_select函数是数组引用传参,会改变$copy_sockets的值!
#PHP中的数组赋值是值拷贝,但是socket_select ( array &$read , array &$write , array &$except) 是引用地址!
$copy_sockets = $comn_sockets;
socket_select($copy_sockets, $write, $except, 0);
foreach ($copy_sockets as $res_socket) {
if ($res_socket === $socket) {
#这里是把不活跃的socket通过挂起函数返回一个新的$new_socket,然后把新的$new_socket添加到原始链接队列$comn_sockets中!
$new_socket = socket_accept($res_socket);
socket_write($new_socket, "恭喜你和服务器已经链接成功!!!") . "\n";
echo socket_read($new_socket, 1024) . "\n";
$comn_sockets[] = $new_socket;
} else {
#已经链接成功且活跃的新$new_socket再一次发送请求(一次链接,永久双向传输)
var_dump($res_socket);
socket_write($res_socket, "服务器返回给你的数据如下:") . "\n";
echo socket_read($res_socket, 1024) . "\n";
}
}
}
?>
clent.php客户端(socke_read函数会持续等待,所以先屏蔽了)
<?php
$address = "127.0.0.1";
$port = 8089;
// Create a TCP Stream socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $address, $port);
#客户端的读会卡死,所以在测试和服务器多用户写的时候,暂时屏蔽了!
// $result = socket_read($socket, 1024);
// echo "客户端接收到的数据为${result}";
while (true){
fwrite(STDOUT, '请输入内容');
$msg = trim(fgets(STDIN));
socket_write($socket, $msg, 1024);
}
?>
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- CentOS7下的LNMP环境搭建Dedecms网站
- 持久层框架JPA与Mybatis该如何选型
- 技术分享 | Online DDL 工具 pt-osc
- 基于hexo框架搭建个人博客【技术创作训练营】
- 对比讲解lambda表达式与传统接口函数实现方式
- 如何使用Java8 Stream API对Map按键或值进行排序
- TencentOS tiny RTOS快速入门
- Nginx用户认证与域名重定向
- LNMP架构介绍与搭建
- Mac 最新版Python3.7.4安装配置,设置默认python版本
- 15个应该掌握的Jupyter Notebook 使用技巧
- python 环境重启方法,系统环境变量配置后python生效设置方法
- 快速上手 WebAssembly 应用开发:Emscripten 使用入门
- Python爬虫之mongodb的索引操作
- (六)日志生成