websocket-PHP篇 下载本文

websocket-PHP篇

1. 概述

websocket协议允许不受信用的客户端代码在可控的网络环境中控制远程主机。该协议包含一个握

手和一个基本消息分帧、分层通过TCP。简单点说,通过握手应答之后,建立安全的信息管道,这种方式明显优于基于 XMLHttpRequest 的 iframe 数据流和长轮询。该协议包括两个方面,握手链接(handshake)和数据传输(data transfer)。 2.适用场景(与http比较)

Http请求主要有http协议,基于http协议的soap协议,常见的http数据请求方式有get和post,

web服务。

优点:

1.基于应用级的接口使用方便 2.要求的开发水平不高,容错性强

缺点:

1.传输速度慢,数据包大。

2.如实现实时交互,服务器性能压力大 3.数据传输安全性差

http适用场景:公司OA服务,互联网服务。

Socket实现服务器与客户端之间的物理连接,并进行数据传输。主要有TCP/UDP两个协议,Socket

处于网络协议的传输层。

TCP:传输控制协议,面向连接的的协议,稳定可靠。当客户和服务器彼此交换数据前,必须先UDP:广播式数据传输,UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,

在双方之间建立一个TCP连接,之后才能传输数据。

但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

优点:

1.传输数据为字节级,传输数据可自定义,数据量小。相应的移动端开发,手机费用低 2.传输数据时间短,性能高 3.适合C/S之间信息实时交互 4.可以加密,数据安全性高

缺点:

1.需要对传输的数据进行解析,转化为应用级的数据

2.对开发人员的开发水平要求高 3.相对于Http协议传输,增加了开发量

使用场景:消息推送、网络游戏,聊天室、银行交互,支付。

http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。

socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开。 3.准备 工作

php扩展模块带有的socket功能。

php4.x 以后有这么一个模块extension=php_sockets.dll,Linux上是一个extension=php_sockets.so。 当打开这个此模块以后就意味着php拥有了强大的socket功能,包括listen端口,阻塞及非阻塞模式的切换,multi-client 交互式处理等 注意:不要使用localhost访问server。 使用cli方式启动server: php server.php

4.socket通信过程

塞)

* @socket_accept:接受连接 * @socket_read:读取数据 * @socket_write:把数据写入缓存 * @socket_close:关闭连接

* @socket_create:创建socket服务 * @socket_bind:将服务绑定在一个IP和* @socket_listen:监听(这里会发生阻

端口上

5.scoket函数

函数名 描述

socket_accept() 接受一个Socket连接

socket_bind() 把socket绑定在一个IP地址和端口上 socket_clear_error() 清除socket的错误或最后的错误代码 socket_close() 关闭一个socket资源 socket_connect() 开始一个socket连接

socket_create_listen() 在指定端口打开一个socket监听 socket_create_pair() 产生一对没有差别的socket到一个数组里 socket_create() 产生一个socket,相当于产生一个socket的数据结构 socket_get_option() 获取socket选项

socket_getpeername() 获取远程类似主机的ip地址 socket_getsockname() 获取本地socket的ip地址

socket_iovec_add() 添加一个新的向量到一个分散/聚合的数组

socket_iovec_alloc() 这个函数创建一个能够发送接收读写的iovec数据结构 socket_iovec_delete() 删除一个已分配的iovec socket_iovec_fetch() 返回指定的iovec资源的数据 socket_iovec_free() 释放一个iovec资源 socket_iovec_set() 设置iovec的数据新值

socket_last_error() 获取当前socket的最后错误代码 socket_listen() 监听由指定socket的所有连接 socket_read() 读取指定长度的数据

socket_readv() 读取从分散/聚合数组过来的数据 socket_recv() 从socket里结束数据到缓存

socket_recvfrom() 接受数据从指定的socket,如果没有指定则默认当前socket socket_recvmsg() 从iovec里接受消息 socket_select() 多路选择

socket_send() 这个函数发送数据到已连接的socket socket_sendmsg() 发送消息到socket socket_sendto() 发送消息到指定地址的socket