版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
——江西应用技术职业学院web前后端数据交互技术网络通信邮差——Socket第七章教学内容1、Socket通信简介2、Socket通信机制3、Socket基本操作4、Socket应用实例知识目标技能目标素养目标●掌握Socket的定义●
理解Socket的工作机制(方法与事件)●掌握Socket的操作和应用●能正确理解Socket工作流程●能使用Socket方法与事件创建Socket连接●提升分析问题、团队协作的能力●养成web开发职业编码规范●培养认真、仔细的职业工匠精神教学重点Socket通信的定义和工作原理、Socket通信方法与事件、Socket操作和应用案例教学难点Socket通信方法与事件、Socket通信综合应用教学内容教学目标一起进入课程学习吧!——江西应用技术职业学院——江西应用技术职业学院web前后端数据交互技术Socket通信7.1目录CONTENTSSocket基本操作Socket通信机制Socket通信简介123Socket应用实例4什么是Socket通信?Socket通信原理Socket通信事件和方法Socket使用实例Socket实现聊天室功能01什么是Socket通信?7.1Socket通信简介产生背景HTTP协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。这种通信模型有一个弊端:HTTP协议无法实现服务器主动向客户端发起消息。如果服务器有连续的状态变化,客户很难获知。大多数Web应用程序将通过频繁的异步JavaScript和XML(Ajax)请求实现长轮询。这样做效率低,也浪费资源(不停连接,HTTP连接始终打开)。WebSocket由此而生。Socket的英文原义是"孔"或"插座",通常也称作"套接字"。WebSocket协议在2008年诞生,2011年成为国际标准。所有浏览器已支持。WebSocket只需要建立一次连接,就可以一直保持连接状态。这相比于轮询方式的不停建立连接显然效率要大大提高。HTTP通信VSSocket通信握手机制服务端和客户端主动发送信息双向平等通信内涵1.两个程序通过双向连接交换数据,一端被称为一个socket。2.socket是双向的长连接,提供了网络通信的一些接口,控制数据的发送。3.双方至少一方主动断开连接,才会中断通信。4.socket可以使用TCP(传输控制协议)来实现,也可以使用UDP(数据报协议)来实现,一般使用TCP协议。内涵socket(套接字)既不是程序,也不是协议,其只是操作系统提供的通信层的一组抽象API。在一般情况下,服务器多用PHP来开发Socket通信,客户端多用Javascript或者JQuery来开发Socket通信。优点:数据传输量极少、实时性好。特点1.建立在TCP协议之上,服务器端的实现比较容易。2.与HTTP协议有着良好的兼容性。握手阶段采用HTTP协议,因此握手时不容易屏蔽,能通过各种HTTP代理服务器。3.数据格式比较轻量,性能开销小,通信高效。4.可以发送文本,也可以发送二进制数据。5.没有同源限制,客户端可以与任意服务器通信。6.协议标识符是ws(如果加密,则为wss),服务器网址就是URL。工作原理Socket是“网络七层”中传输层的一个接口,是对TCP连接的一个封装。工作流程1.服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。2.客户端请求:由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。3.连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。分为三个步骤socket通讯的工作原理可以参考下面的流程图:通信需要服务端和客户端组成:服务端:1.使用php初始化socket然后绑定一个端口,对端口进行监听。2.调用accept阻塞,等待客户端连接。客户端:1.初始化一个socket2.连接服务器。3.发送数据请求,服务器端接收请求并处理,把回应数据发送给客户端4.读取数据。5.关闭连接,一次交互结束。谢谢大家观看——江西应用技术职业学院——江西应用技术职业学院web前后端数据交互技术Socket通信目录CONTENTSSocket基本操作Socket通信机制Socket通信简介123Socket应用实例4什么是Socket通信?Socket通信原理Socket通信事件和方法Socket使用实例Socket实现聊天室功能02Socket通信事件和方法7.2Socket通信机制socket通讯的工作原理可以参考下面的流程图:socket通信事件与方法:服务器端函数说明socket_create(stream,$protocol)创建Socket,参数:stream:socket流$protocol:协议socket_bind()绑定IP和端口socket_listen()监听端口socket_accept()接受一个socket连接,与客户端建立连接socket_read()读取客户端发送过来的数据socket_write()将数据写到socket缓存向客户端发送socket_close()关闭Socket连接客户端函数说明Websocket(wsurl)向服务器发送连接send(string)向服务器发送数据onmessage事件监听服务器发送过来的数据onclose事件监听服务器开关状态Socket通信事件与方法1.socket_create函数socket_create(int$domain,int$type,int$protocol):resource创建并返回一个套接字,也称作一个通讯节点。一个典型的网络连接由2个套接字构成,一个运行在客户端,另一个运行在服务器端。domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。protocol:协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。Socket通信事件与方法2.socket_bind函数socket_bind(resource$socket,string$address[,int$port=0]):bool绑定address到socket。该操作必须是在使用socket_connect()或者socket_listen()建立一个连接之前。socket:用socket_create()创建的一个有效的套接字资源。address:
如果套接字是AF_INET族,那么address必须是一个四点分法的IP地址(例如)。如果套接字是AF_UNIX族,那么address是Unix套接字一部分(例如/tmp/my.sock)。port(可选):仅仅用于AF_INET套接字连接的时候,并且指定连接中需要监听的端口号。Socket通信事件与方法3.socket_listen()函数socket_listen(resource$socket[,int$backlog=0]):bool监听端口socket:
用socket_create()创建的一个有效的套接字资源。backlog:指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。Socket通信事件与方法4.socket_accept()函数socket_accept(resource$socket):resource接受一个socket连接,与客户端建立连接socket:用socket_create()创建的一个有效的套接字资源。Socket通信事件与方法5.socket_read()函数socket_read(resource$socket,int$length[,int$type=PHP_BINARY_READ]):string读取客户端传来的数据。socket:用socket_create()创建的一个有效的套接字资源。$length:读取的最大字节数。$type:数据类型,取值有PHP_BINARY_READ(默认,)安全读取二进制数据。以及PHP_NORMAL_READ,碰到\nor\r符号结束读取。Socket通信事件与方法6.socket_write()函数socket_write(resource$socket,string$buffer[,int$length=0]):int向客户端写入数据。socket:用socket_create()创建的一个有效的套接字资源。$buffer:读取数据的首地址$length:最大读取字节数Socket通信事件与方法
7.socket_close()函数socket_close(resource$socket):voidsocket_close()会关闭掉给定的socket资源。这个函数只针对套接字资源有效,不能用在其他类型的资源类型上。socket:用socket_create()创建的一个有效的套接字资源。Socket通信事件与方法8.Websocket(wsurl)函数varws=newWebSocket('ws://localhost:8080');WebSocket对象作为一个构造函数,用于新建WebSocket实例。socket:用socket_create()创建的一个有效的套接字资源。执行上面语句之后,客户端就会与服务器进行连接。Socket通信事件与方法9.send(string)函数intsend(SOCKETs,constcharFAR*buf,intlen,intflags);向服务器发送数据第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。Socket通信事件与方法10.onmessage事件ws.onmessage=function(event){vardata=event.data;//处理数据};实例对象的onmessage属性,用于指定收到服务器数据后的回调函数。用于监听服务器发来的数据。Socket通信事件与方法11.onclose事件ws.onclose=function(event){//处理关闭事件};实例对象的onclose属性,用于指定连接关闭后的回调函数。谢谢大家观看——江西应用技术职业学院——江西应用技术职业学院web前后端数据交互技术Socket通信目录CONTENTSSocket基本操作Socket通信机制Socket通信简介123Socket应用实例4什么是Socket通信?Socket通信原理Socket通信事件和方法Socket使用实例Socket实现聊天室功能04Socket实现聊天室功能7.4.2Socket应用实例任务描述前面我们使用HTTP实现了一个聊天室效果。但是HTTP需要不断发送请求消耗资源,实际上,Socket更适合用来实现聊天室功能。案例分析案例思路:1.使用PHP实现Socket服务端//创建Socket。AF_INET:代表通信时使用IPv4协议;SOCK_STREAM:代表传输的数据是二进制流数据;SOL_TCP:代表底层使用的协议是TCP$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);//指定Socket相应的属性。SOL_SOCKET:设定协议的等级;SO_REUSEADDR:设置端口释放之后可以立即被使用案例分析案例思路:socket_set_option($socket,SOL_SOCKET,SO_REUSEADDR,1);//绑定端口socket_bind($socket,0,$port);//监听端口socket_listen($socket);//声明一个数组,用于存放所有的客户端连接$clients=array($socket);案例分析案例思路:while(true){$changed_socket=$clients;//在当前数组中获取活跃的Socket连接,即当前正在发送请求的连接或正在传输数据的连接等socket_select($changed_socket,$null,$null,0,10);案例分析案例思路://判断当前的Socket是否为活跃的Socket,如果是,说明客户端在请求连接if(in_array($socket,$changed_socket)){echo"clientconnecting";//显示正在连接中$socket_new=socket_accept($socket);//接受连接$clients[]=$socket_new;案例分析案例思路://发送握手信息$header=socket_read($socket_new,1024);perform_handshaking($header,$socket_new,$host,$port);//在连接成功后,当前Socket要从活跃Socket列表中删除,否则会陷入死循环$key=array_search($socket,$changed_socket);unset($changed_socket[$key]);谢谢大家观看——江西应用技术职业学院——江西应用技术职业学院web前后端数据交互技术Socket通信案例分析案例思路:1.使用PHP实现Socket服务端//创建Socket。AF_INET:代表通信时使用IPv4协议;SOCK_STREAM:代表传输的数据是二进制流数据;SOL_TCP:代表底层使用的协议是TCP$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);//指定Socket相应的属性。SOL_SOCKET:设定协议的等级;SO_REUSEADDR:设置端口释放之后可以立即被使用案例分析案例思路:socket_set_option($socket,SOL_SOCKET,SO_REUSEADDR,1);//绑定端口socket_bind($socket,0,$port);//监听端口socket_listen($socket);//声明一个数组,用于存放所有的客户端连接$clients=array($socket);案例分析案例思路:while(true){$changed_socket=$clients;//在当前数组中获取活跃的Socket连接,即当前正在发送请求的连接或正在传输数据的连接等socket_select($changed_socket,$null,$null,0,10);案例分析案例思路://判断当前的Socket是否为活跃的Socket,如果是,说明客户端在请求连接if(in_array($socket,$changed_socket)){echo"clientconnecting";//显示正在连接中$socket_new=socket_accept($socket);//接受连接$clients[]=$socket_new;案例分析案例思路://发送握手信息$header=socket_read($socket_new,1024);perform_handshaking($header,$socket_new,$host,$port);//在连接成功后,当前Socket要从活跃Socket列表中删除,否则会陷入死循环$key=array_search($socket,$changed_socket);unset($changed_socket[$key]);案例分析案例思路:如果不是新连接,是客户端在发送数据,服务器开始读取客户端发送的数据并进行格式处理(解包、转换、编码)//解包数据$received_text=unmask($buf);//将数据解包后转成JSON对象$msgJson=json_decode($received_text);案例分析案例思路:
$namer=$msgJson->namer;//读取数据$content=$msgJson->content;$message=mask(json_encode([//将数据进行编码'namer'=>$namer,'content'=>$content,'type'=>'usermsg']));案例分析2.使用Jquery实现Socket客户端$(function(){//连接Socket的URL地址varwsurl="ws://:8085/ajax/server.php";varwebsocket;//用于存放客户端创建的Socket对象案例分析if(window.WebSocket){websocket=newWebSocket(wsurl);websocket.onopen=function(event){//onopen事件,连接成功$('#showMessage').append("<p>connetedsuccess!</p>");}案例分析websocket.onmessage=function(event){//onmessage事件,接收消息,显示在页面上varmsg=JSON.parse(event.data);vartype=msg.type;varnamer=r;varcontent=msg.content;案例分析if(type=='usermsg'){$('#showMessage').append("<p>"+namer+":"+content+"</p>");}else{$('#showMessage').append("<p>system:"+content+"</p>");}}案例分析//数据发送
functio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部队年度考核奖惩制度
- 员工食堂管理奖惩制度
- 团建团队奖惩制度范本
- 学校组织部门奖惩制度
- 违规野外用火奖惩制度
- 华为奖惩制度实施细则
- 厂务处员工奖惩制度范本
- 保安员疫情防控奖惩制度
- 仪班组考核奖惩制度
- 定制工厂奖惩制度范本
- 第七人民医院供应商来访接待须知
- (高清版)TDT 1056-2019 县级国土资源调查生产成本定额
- 《跟单信用证统一惯例》UCP600中英文对照版
- 材料设备验收移交单
- 输煤栈桥彩钢板更换施工方案
- PCI术后常见并发症及处理
- GB/T 35163-2017载重汽车轮胎湿路面相对抓着性能试验方法
- 【公开课】排列、排列数+课件高二下学期数学人教A版(2019)选择性必修第三册
- 溢油应急处置培训讲义
- 袁晓萍:认识圆柱
- 胜任特征辞典
评论
0/150
提交评论