Swoole入门到实战打造高性能赛事直播平台百度网盘下载

Swoole入门到实战打造高性能赛事直播平台百度网盘下载点击快速获取相关资源

Swoole入门到实战打造高性能赛事直播平台 2

Swoole入门到实战打造高性能赛事直播平台课程介绍(A000123):

许多PHP程序k l \ !员在熟悉LAMP应用开发之后,` 0 { s B [ P B开始尝试使用Swoole进行长生命周期、异步非阻塞、Socket网络通信、高性能高并发的编程开发。

目前Swoole的入门教程非常匮乏,学E Z ( 6 B \习者需要付出大量时间精力阅读Swoole的文档。《Swool8 _ H r ] 7 q B de从入H k O m \门到实践》的出现弥补了空缺,该教程内容从一个又一个的实例开始Z 4 [ / { e r V B讲解,再到项– ! & M目实践,内容由浅入@ ! \ p G T深,非常适合Swoole的初学者学习,可帮助PHP程序员快速掌握Swoole,并在工作中得到应用和实践。

# e K程目录:

Swoole入门到实战打造高性能赛事直播平台

  • 第1章 Swooa H ?le入门到实战打造} R P N E \ W k高性能赛事直播平台课程介绍试看4 节 |$ L X J h Y I ! 26分钟
  • 欢迎大家来到swe } ) ^ w c N ]oole的a o 8 % x 6课程!本章主要是介绍了s] 4 P i _ – B Xwoole的一些特性,以– J b A = B及使| . @ C t /用场景,并且分享了swoole在其他公司的一些案例,最后h % T w R 8 h e f重点讲解了swoo% $ L c | V P ^ Ple学习的一些准备工作。
    • 视频:1-1 课程导学 (07:47)试看P R K .
    • 视频:1-2 Swoole简介 (06:26)
    • 视频:1-3 学习Swoole的准备工作 (04:4w v ; 1 S %8)
    • o [ M ! ] % ;频:@ p u s + _ { Z G1% M ; l \ \ \ @-4 【更新x P o 7 H 0 6 s 3】课程升级注意事2 1 r ` m .项 (06:5E 3 A2)
  • 第2章 PHP 7 源码安装4 节 | 23分钟
  • 很多工作好几年y ` G的PHPer对源码编译安装并不是很了解,其实这种情况是非常V } h 2可怕的。本章我会教大家如何通过源码安装PHP7T w t U i,并且简化PH@ J l v d& d U W I 5 i S $ $P执行命令。最后重点讲解了源码安装踩到的4 I O 3 !坑,让您在= u W O [源码编译安装过程中少走很多弯路? % b y ; n
    • 视频:2f } p } w I @ u @-1 获取PHP7源码 (02:36)
    • b O j y | 3 5频:2-2 PHP7源码安装 (09:28)
    • 视频:2-3 简化PHP执行命令 (o & L G ` b $ #03e N \ C:52)
    • 视频:2– S Q k B v-4 源码安装踩到? I y V 9 Q的那些坑 (06:11)
  • 第3章 源码编译安装swoole3 节 | 15分钟
  • Swoole的安装方式有2种:傻瓜式安装T @ w ^和源码编译安装!本章节我将带领大家通过源码编译安装Swool[ E R P T M i 9 Qe扩展,让大家真正去理解Swo{ : Nole的安装方式和参数设置。最( C # w x后让PHP Y d l – *P支持Swoole,然后开启A O y ( s第一个swooT { 5 T p i ^ – –le程序!
    • 视频:3-1 Swoole下载 (02:50)E % M
    • 视频:3-2 Swo~ b q A h / 8 p uole源码安装 (06:06)
    • 视频:3-3 双剑合璧-PHP7支持Swoole (05:07)2 z e ` & 7 v
  • 第4章 玩转网络通信引擎试看11 节 | 122分钟
  • 本章重点介绍b & / 1了TD T j j t k 5 w –CP UDP Ho W e + b % 7 eu U l 8 ( y % & E ?TTP websocket通信引擎。在swoole htt0 r i d 5 l v =p server中会带领大C = a J L / ; |家对比K ? 7 | 0 V传统的http,并教大家如何配置swoole http让他支持静态资源的访– . # ( [ 0 (问;同时详细讲解k @ I O x } I .如何使用Swoole websocket轻松解决客户端和服务I K E h j \器端长连接难题;使用Swoole提供L g C G S了异步tasX V y z J P +k任务完美解决实G R D T B 4 l O际工作中面临的耗时的场景,本章会特别细…
    • 视频:4-1 Swoole–TCP服务器 (17:3^ N g o7)
    • 视频:4-2 Swoole – TCp ~ sP客户端 (14:45& w 3 j C)
    • 视频:4-3 Swoole–UDP服务 (02:42)
    • 视频:4-4 Swoole – HTTP服务(上) (18:05)m G I k y o b
    • 视频:4-5 Swoole –I l _ HTTP服务 (下) (05:25)
    • 视频:4-6 websocket服务基本概述K + ` F 5 \ : 8 ) (04:57)
    • 视频:4-7 websocket服务案例实现(上) (19:23)
    • 视频:4-8 webso] i t \ c (cket服务案例实现(下) (05:43)
    • 视频:4-9Z G | Y 6 websocket服务优化 (11:12)2 7 T * I ^
    • 视频:4-10 Swoole task任务使用(上) (14:3+ P 6 ) . l g6)
    • 视频:4-11 Swoole-task任/ J )1 $ q ^ 9 ) q 9务使用(下) (07:2H [ R ]4)
  • 第5章 异步非堵塞IO场景9 节 | 85分钟
  • PHP+Crontab做定时任务是很常见的案例,但是Cr1 % l ^ r 3 # 6ontab只能精确到分钟级,s 7 ~ cSwo= | F ( Nole的毫秒定时器能轻松精确到更细Y C \ ( \ s D w的力度。本章详细讲解了毫+ y , p 5 E { ; O秒定时器、异步文件读和写s T : :、异步Mysql、以及异步Redis并且每一个场0 S a @ M景都结合案例来讲解,让小伙伴o h W 9 O轻轻松松的理解这些场景;最后为了Z d N 0 j D z – }让Swoole支持异步Redis 课程` J \中还教大家如何源码g 6 x \编译安装h…
    • 视频:5-1 【更新】本章学习注意K @ 9H } A 6 ( ( x p事项 (01:36)
    • 视频:5-2 S5 k U S n vwoole毫秒定时} @ / , , G ) e 6器 (08:27)
    • _ K – u H i A , F频:5-3 异步文件系统IO-读取文件 (10:01)
    • 视频:5-4 异步文件IO系D 0 j 0 W统-写文件 (13:40)
    • 视频:5w k g } I J-5 异步MysqlA u s详解G f o ) q &(上) (16:53)
    • 视频. m o t ~5-6 异步Mysm Z Gql详解(下) (10:54)
    • 视频:5-7 异步Res z U c \ ldis – redis服务安装 (05:55)
    • 视频:5-8 异步Redis – hiredis安装以及Swoole重新编译 (05:47)
    • 视频:5u S p . x * B-9 异步Redis详解 (11:42)
  • 第6章 进程 内存 协程试看19 节M w | x B I I j _w I G X J U 6 | 149分钟
  • 原生a n Y e的PHP不支持多线程,多进程支持的也不是很好。Swoole提供了很好的多进程处理方案。课程中详细的讲解了进程,并且通过一个场景来分析Swoole进程的使h # I g 1 3 ; +E [ n o b L场景,让小伙伴对Swoole进程有新的认知;在多进程中子进程和子进程以及子进程和主进程如何共享数据?课程中通过内存来引入这个话题,并详细讲解了Swoole table模块,如…
    • 视频:6-1 进程详解(m } ? b = V ! 7上) (08:31)
    • 视频N 3 % v l ` + 1 D6-2 进程7 7 g 5 z9 r 9 = T解(下) (09\ c ) L e:08)
    • 视频:6-3( ; w W ; S l 0 Swoole进程案例解刨 (1v z N t u4:5K L T5)
    • 视频:6-4 Swoole内存-table详解(上) (10:13)
    • 视频:6-5N A , Swoole内存-table详解(下) (04:53D d t w N Z 0 I #)
    • 视频:6-6 Swoole 协程精讲-基! p }V 7 @ ! * h R I B I于2.x(上) (13:24)试看
    • 视频:6-7 Swoole 协程精讲-基于2.x(k m %下) (02:53)
    • 视频:6-8 【更新】b 3 . h d * x ;协程基本使用-基于4.x (11:18)
    • 视频:6-9 【更新】W b & f B ` W} t : O |t t + ! Fsleep效果等同于协程sleepKJ , ] p [ _ v e h – 4.x版本 (03:51)
    • 视频:6-10 【更新】x x v@ D B = 0 c ?协程client讲解以及小伙伴容易犯错的地方提示} V ` C ( 6-4.x版本 (07:55)
    • 视频:6-11 【更新】 协程http客户端1-4.x版本 (07:13)
    • 视频:6-x U y o Y ^ V e12 【更新】 协q ^ ( l J4 w 6 0 E @ 1程http客户端2-4.x版本 (04:47)
    • 视频:6-13 【更新】 swoo2 f alx q m ( ;e协c K L t B a ? x程http Server (09:m K W L B B 6 i m18)
    • 视频:q – g { u T T f n6-14 【更新】让swoole协程http Server支持 websocket (08:12)
    • 视频:6-15 【更新】协程redis (04:56)
    • 视频:6-16 【更f Y * [新】一键协i x I \] = v ) M n ; n程化原生PHP的redis客户端 (05:46D – 4 7u T q # V + n #)
    • 视频:6-17 【更新】协程化redis一些O V J q 2问题的思C @ N [ P O考 (08:57)1 \ 3 _ I
    • 视频:6-18 【更新】协程文件IO操作t – 3 ? d (04:25)
    • 视频:6-19 【更新】协程管道分析 (08:05)
  • 第7章 赛事直播–登录模块15 节 | 192分钟
  • 前面学习完Swoole后,我们就开始正式进入到实战项目阶% o 2 w段!项目框架* d | C l $我们采用Thinkp] L v x T L a \hp 5.0 ,项目中的静态页面是单独部署在一个模块的,所有N X Q N他的数据都是通过Ajax获取后端数据;做到前后端分离;登录案例中我们使用到了sT q ` – ^ awoolb g 9 # L ` we http的特性,登录方式\h , K F . 6 3 V b A \ |我们采用手机号+短信验证码的方式进行登z * m & 2 + s w录并且将数据存储到Redis中,在! – X ! | :这个…e ) h
    • 视频:7-1 实战环境部署Q A z准备 (1Z t D ^ ? K E & =3:40)
    • 视频:7-2 登录流程介绍 (03:37)Z , # / e
    • 视频:7-3 让Swoole4 B ; * P M X完美支持TP5l / c T P i W(上) (09:53)
    • 视频:7-4 让Swoole完美支Z # s * x持TP5(中) (08:56)
    • 视频:7-5 让Swoole完美支5 E h 7 ~持TP5(下) (08:53)
    • 视频:7-6 让Swoole完美支持TP5优化篇(上) (* ) ` S v X14:39)
    • 视频:V U D R q 2 v k7-7 让Swoole完美支持TP5优化篇(下) (09:05)
    • 视频:7-8 阿里大于介I \ e E | ! X绍以及SDK获取 (05:33)
    • 视频:7-9 基于阿里短信服务发送第一i 0 t h S F个短信验证码demo (11:35o 0 c x # ) 8 ~)
    • 视频:7-10 手机号码登录 –T 8 N v S ~ c \ 获取验证码(一) (X ; ( p , l17:07)
    • 视频:7-11 手机号码登录 – 获取验证码r v ; G /(二) (14:10)
    • 视频:7-12 登录实现(一) (16:08)\ o L
    • [ J J $ o /频:7-13S \ n a : + A V 登录实现(二) (22:54)
    • 视频:b h T / $ N F 5 F7-14 登录模块优化(一) (22:33)
    • 视频:7-15 登录模块优化(二) (12:50)
  • o e t8章 赛事直播 – 直播模块17 节 | 153分钟
  • 本章我们会实现赛事节目列表页面;Y _ y 赛事直播页 赛事数据页;在赛事[ ^ y直播的页面中由于客户端和服务Z 0 a t I v 0 7 T器端必须是要保持一个长久的连接,这样后端有新的直播数据的时候页面才能实时的呈现,这个地方我们用到的就是swoo+ l O Y e p klZ Z L % b We里面websocket并且还会结合异步task任务来处理响应的内容,赛事的内容我们支持图片+文字;课程中还会讲解开…
    • 视频:8-1 赛事直播介绍 (04:53)
    • 视频:8-2 赛事直播业务分析 (10:37 ; p G t + b ; &2)
    • 视频:8-30 $ Q 赛事直播表的设计 (16J + 8 @ S n !:06)
    • 视频:8-4 Websocket服务搭建并支持htt+ O # L + Tp服务 (10:53)
    • 视频:8-5 赛事直播解说员页面搭建(上) (08:57)U l U g
    • 视频:8-6 赛事直播= R Z } @ W P &解说员页面搭建(下) (08:17)
    • 视频:8-7 赛事直播员3 @ = 1 +图片发布 – 上传图片(一) (13:19)
    • 视频:8-8 赛事直播员图片发{ O l G s M = ^布 – 上传图片(二) (04:19)
    • y w Zi E r + F ?频:8-9 赛事直播员图片发布 – 上B m n b % Z B N s传图片(三) (04:52)
    • 视频:8-10 赛事直播数据流程测试 (07:33)
    • 视频:8-11 赛事直播流程测试 (04:35)
    • 视频:8-! Q – ~ E12 赛事直播在线用; o g I 6 bf ] ; ] t a K处理 – redis方案(一) (12:4* : m8)
    • 视频:8-13 赛事直播在线用L ^ } + j户处理 – redis方案(二) (07:41)
    • 视频:8-14 赛事直播在线用户处理 –[ v I a redis方案Y 3 B @ v(基础7 : !类库优化) (08f F B 8 ^ [ D B ::48\ Z O \ T & t)
    • 视频:8-15 赛事直播逻辑开发X i h W(一) (10:a [ , b [ G # ;48! t 0)
    • 视频:8-16 赛事直播逻辑开发 (二) (08:54)
    • 视频:8-17 赛事直播功能开发-优化 (09:22)
  • 第9章 赛事直播 – 聊天室模块5 节 | 39分钟
  • 本章我会带领大家利用Swoole weV = A % M ;bsocket等知识点实现聊天室Z O 8模块!聊天室模块是指每个@ a G o7 H h # Q – 9 y C 7登录的用户可以实时的和其他用户一起聊天,T Z 1 T F C n 2畅游比赛心得,同时我们会使用swoole的特性来获取在线的用户数。
    • 视频:9-1 聊天室模块功能O _ H 4 \ n z 4分析 (02:55)
    • 视频:9-2 聊天室模块发送数J ] u u [ _ + c G据交互处理 (08`p l M s t u:16)
    • ] q . # i }频:9-3 聊天室chartd x + o 2 Ojs文件编写 (04:14q . ` 2 3 ? [ e A)
    • 视频:9-4 Swoole中connectioni % V f E & _ ns的使用场景 (10:08)
    • 视频:9-5 聊天e ( % ` Y & &室功能开发 (13:07)
  • 第10章 系统监控和性能优化模块10 节 | 102分钟
  • 系统的稳定运行是每0 W n B = 8 i个工程师Y U 7必须要深度考虑的问题,一个系统如果线上运作不稳定,无论你技术方案多么先进你的系统也是不靠谱系统;课程中利用Linux+SwooL L x B T Q , ^le+PHP监控平台的稳定性,为服务保驾护航;. P C b L 8 P v面对高流量实时在线的用户如何提升系统服务性能 本课程给大家带来干货内容,结合自身7年大型互联网工作经验毫无保留的教大家…
    • 视频:10-1 本章节介绍 (; P b04:41)
    • 视频:10-2 服务监控 (21:16)
    • 视频:10-3 日志落盘处理 (10:59)
    • 视频:10-4 多个请求过滤 (07:08)
    • 视频:10-5 服务平滑重启 (12[ ; ; G @:56u ] E)
    • 视频:1. # z i d 0 L N i0-6 负载均衡-概述 (09~ ; %:00)? ) Q a a i
    • 视频:10-7 负载均衡-nginx安装 (09:16)
    • 视频:10-8 负载均衡-静态文件支持} h L 3 I 0 P G ` (03:27)
    • 视频:10-9 Nginx负载-nginx转发到Swoole服务器 (07:10)
    • 视频:10-10 负载均衡 (15:20)
  • 第11章 课程总结1^ P * A j J 节 | 9分钟
  • 课程回顾,重难点总结!
    • 视频:11-1 结. k Q束语 (08:43)

文件目. x s k ] , E k录:

├─Swoole入门到实战] . ] Z打造高性能赛事直播平台-299元-完结
│ │ live.sql
│ │ thinkphp.zip
│ │ 提供给学生的文件 2.zip
│ │ 提供给学生的文件04-04.zip
│ │ 项目源码.zip
\ ` / \
│ ├─第10章 系统监控和性能优化模块
│ │ 10-1 本章节介绍.mp4U V $ ?
│ │ 10-10 负载P x / b I均衡.mp4
│ │ 10-2 服务监控.D t t R y A O \mp4
n v v e x / │ 10-3 日志落盘A l h 1 G x Z * %H t J * 0 T H (处理.mp4
│ │ 10-4 多个请求过滤.mp4
│ │ 10-s 5 + i m O5 服务平滑% T 3 Z )V m M l s重启.mp4
│ │ 10-6 负载均衡-概述.mp4
│ │ 10-7 负载均衡-ng. w , 6 * % – 6 _inx安装.mp4
│ │# Jv b ` ; xb 4 1 L 3 \ 10-: h G8 负载均衡-静态文件支持.mp4
│ │ 10-9 Nginx负载-~ R d ^nginx转发到Swoole服务器.mp4
│ │ .htm| J – z tl.url
│ │
│ ├─第1? H e h1章 课程总结
│ │ 11-1 结束语.mp4
│ │
│ ├─第1章 SwoolA r y . y e # U \e入门到实战打造高性能赛事直播平台课程介绍
│ │ 1-1 课程导学.mp4
│ │ 1-2 Swoole简介.mp4
│ │ 1-3 学习Swoole的准备工作.| q { Z U F ,mp4
│ │
│ ├─第2章 PH_ E 8 0 : Jq v ) 9 3 D 1P 7 源码安装
│ │ 2-1 获取PHP7源码.= S Y * k n # G omp3 \ _ 7 x4
│ │ 2-2 PHP7源码安装.mp4
│ │ 2-K P V G n f v ;3 简化PHP执行命令.mp4
│ │d p / l j 2-4 源码安装踩到的; U #那些坑.mp4
│ │
│ ├─第3章} A Q 9 n E ~ 源码编译安装swoole
│ │; | * Q ~ f Z _ 3-1 Swoole下载.mp4
│ │ 3-2 Swoole源码} ~ r ^ 8 ~ h P Q安装.mpX e W l r 8 L4
│ │ 3-3 双剑合e w ~ %璧-PHP7支持Swoole.mp4
│ │
│ ├─第4章 玩转网络通信引擎
│ │ 4-1 Swoole–TCd U U 3 1P服务器.mp4
i A ~ 6 V │ 4-10 Swoole task任务使用(上).mp4
│ │ 4-11 Swool( L c % 6 6 W ?e-task任务使用(下).mp4
│ │ 4-2 Swoole–TCP客户端.\ 6 } v N n 1mp4
│ │ 4-3 Swoole–UDP服务.mp4
│ │ 4-4 Swoole – HTTP服务(上).mp4
E + $ 3 m e n Q │ 4-5 Swoole – HTTP服务 (下).mp4
│ │ 4-6 websocket服务基) W ( v Q &本概述.mp4
│ │ 4-7 websocket服务案例实现(上).mp4
│ │ 4-8 websocket服务案例实现(下).mp4
│ │ 4E = d Z 2 ?-9 websocket服务优化.mG $ l { d Q * S 2p4
│ │
│ ├─第5章 异步非堵塞IO场景
│ │) v % C u 5-1 Swoole毫秒Q ! U N M # } Q \定时器.mp4
# \ u @ │ 5-2 异步文件系统IO-读取文件.mp4
│ │ 5-3 异步文件IO系统-写文件.mp4
│ │ 5-x o * E :4 异! T B ( N V E s步Mysql详h ] E解(上).mp4
│ │ 5-5 异步Mysql详解h ( F m = @ M 1(下).mp4
│ │ 5-6 异步Redis – redis服务安装.mp4
│ │ 5-7 异步h 7 BRedw 0 z k + F \ Yis – hiredis安装以及Swoole重新编译.mp4
│ │ 5-8 异步Redis详解.mp4
│ │c ? . s 1 K \ n .html.url
│ │
│ ├─第6章 进程 内存 协程
│ │ 6-1 进程详解(上).mp4y 5 X
│ │ 6-2 进r o z _ O程详解(下).mp4
│ │ 6-3 SwW \ joole进程案例解刨.mp4
│ │ 6-4 Swooley ) / r内存-table详解(上).mp4
│ │ 6-5 Swoole内存-table详解(下).mp4
│ │ 6-6 Swoole 协程精讲(上] O Z N).mp4
│ │ 6-7 Swoole 协程精讲(下).mp4
│ │
│ ├─第\ 4 X x x7章 赛事直播–登录模块
│ │ 7-1 实战环境部署准备.mp4
│ │ 7-1T B ! w 0 l C0 手机号码登录M I R 2 g W , N ~ – 获取验证码(二).mp4
L J d M n z Z` b E 7-11 登录实现(一).mp4
│ │ 7-1r | X i ( T e2 登v k ( h q录实现(二).mp4
│ │ 7-13 登录模块优化(一).mp4
│ │ 7-14 登录模块p y A S 5优化(二).mp4
│ │ 7-2 登录流程介绍z D Y N.mp4
│ │w Q ~ t n I 7-3 让swoole完美支持TP5(上).mp4
│ │ 7-4 让Swoole完美支持TP5(中).mp4
│ │d . y N L ` u` X E ~ z R m 5 7-5 让Swoole完美支持TP5(下).mp4
│ │ 7-6 让Swoole完美支持TP5(优化篇).mp4
│ │ 7-7 阿里大于介绍以及SDK获取.mp4
│ │ 7-8 基于阿里+ 8 i 9 \ ) ) =短信服务发送第一个短信验证码l g SdemoY K 7 G.mp4
│ │ 7-9 手机号码登录 – 获取验证码(一).mp4
│ │
│ ├─第8章: \ @ p Z % 赛事直播 –I ` F h T 7 y m = 直播模块
│ │ 8-1 赛事直\ m b播介绍.mp4
│ │ 8-10 赛事直播数据流: [ ^ 2 f !程测试.mp4
│ │ 8-11 赛事直播流程测试.mp4
│ │ 8-12 赛事直播在线用户处理 – redis方案(一).mp4
v w J = j │ 8-13 赛事直播在e 0 F h k G线用户处理 – redis方案(二).mp4
k L D ^ n m M T Z │ 8-14 赛J ` =事直播c dR T / T T $在线用户o J m ) 2 A / H处理 – redis方案(基础类库优化).mp4
│ │ 8-Z @ & ~J J } j 4 r ( R15 赛事直播逻辑开发(一– j ] T 8 5).mp4
│ │ 8-16 赛事直播逻辑开发 (* | @ r r F二).mp4
│ │ 8-17 赛事直播功能} 5 i F开发-优化.mp4
│ │ 8-2 赛事直播业务分析.mp4
│ │ 8-3 赛事直播表的设计.mp4
│ │ 8-4 Websocket服务搭建并支持http服务.mp4
$ ^ , } 7 o w | Z │ 8-5 赛事直播解说员页面搭建(上).mp4
│ │ 8-6 赛事直播解说员页面搭建(下).r J F m Ump4
│ │ 8-7 赛事直播员图片发布+ ) ! – 上传图片(一)., M ^ l dmp4
│ │ 8-8 赛] b a \ H ^ J %事直播员图片发布 – 上传图片(二).mp4
│ │ 8-9 赛S ] ^ q # n . A H事直播员图片发布 – 上传图片(三).mp4
│ │
│ └─第9章 赛事直播 – 聊天室模块
│ 9-1 聊天室模块功I . H D +能分析.mp4
│ 9-2 聊天室模块发送数据交互处理.mp4
│ 9-3 聊天室w p # tm s +ch/ ? xartjs文件编写.t V X 0 8 a , f Pmp4
│ 9-4 Swoole中connections的使用场景.mp4
│ 9-] ] ~ { : i5 聊天室功能开发.mp4

点击获取课程资源:SwooleP D : ( d – \ x !入门到实战打造高性能赛事直播平台? \ \百度网盘下载

https://zy.98ke.com/zyjn/75364.html?ref=9400

0

评论0

没有账号? 注册  忘记密码?