Socket
Socket使用的方向
智能化家居,pos刷卡机,和浏览器的websocket协议的通信。
七层网路
PHP的socket操作
Socket扩展,这个扩展就是给php操作socket的,在linux/mac sockets.so
在php.ini里面讲sockets扩展打开
使用官网查看sockets内容
http://php.net/sockets
创建一个sockets服务器
这个使用php创建http服务器
scoket_create():http://php.net/manual/zh/function.socket-create.php
第一个参数:制定坚挺的类型,ipv4和ipv6,另一个是socket文件
第二个参数:制定这个套接字的类型,一般我们选择SOCK_STREAM,因为这个类型传输数据是可靠的,性能比较好
第三个参数:制定socket使用的底层协议,一般是tcp
给上面创建的socket标识棒冰ip和端口
socket_bind():http://php.net/manual/en/function.socket-bind.php
第一个参数:就是创建的socket的资源
第二个参数是本地的ip地址
本地的ip地址可以通过ipconfig来查看
第三个参数:输入一个自定义的端口号,这个端口号不要有重复即可
启动socket服务器
socket_listen()
第一个参数:socket资源
第二个参数:监听的数量
把socket保存到数组里面
保存浏览器的websocket连接能否进行握手通信
socket在每一次刷新页面会执行,需要使用死循环让这个socket一直执行
找出活跃的socket
socket_select():
只依靠这个socket_select()选出活跃的socket是不可靠的,还需要通过socket_select()返回的值进一步进行判断
0:代表的没有任何的客户端给我们传递信息
false:标识出现了错误
处理当前正在获取的socket,分开对待主socket和其他的socket
主socket:负责接收新的socket,不负责和socket客户端进行数据交互
其它的socket:不负责接收新的socket,负责和socket客户端进行数据的交互,一个socket对应的一个客户端的数据交互
处理主socket,接收新的socket客户端的连接
socket_accept():
第一个参数:主socket
返回的就是负责和新的socket客户端进行的数据交互的socket资源
接收socket客户端传递过来的数据
socket_recv():
第一个参数:和这个socket客户端进行数据交互的socket
第二个参数:这个socket客户端传递给这个ssocket服务器的数据
第三个参数:从这个socket客户端传递给我们的数据中读取多少字节的数据,一般设置为2048
第四个参数:设置读取客户端数据的这个标记,一般给个0
返回值:实际读取了多少字节的数据
Websocket
匹配
preg_match(“/Sec\-WebSocket\-Key:\ (.+)\r\n/”, $data, $matchs);
$responseKey=base64_encode(sha1($matchs[1] . “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”, true));
匹配设置
$responseData = “HTTP/1.1 101 Switching Protocols\r\n”;
$responseData .= “Upgrade: websocket\r\n”;
$responseData .= “Connection: Upgrade\r\n”;
$responseData .= “Sec-WebSocket-Accept: {$responseKey}\r\n\r\n”;