在php中搭建websocket环境之具体操作方法示例

在php中搭建websocket环境之具体操作方法示例来了,大致教程如下所示:php搭建websocket环境的方法:


1、在php.ini文件中找到sockets扩展并将其前面的分号删除;

2、将http升级为websocket;

3、配置环境变量,将PHP安装路径添加到Path中;

4、在cmd输入“php Path”即可。


在php中搭建websocket环境之具体操作方法示例


本文适用于windows7系统、PHP8.1版、Dell G3电脑。


在php中搭建websocket环境之具体操作方法示例


创建这个服务端需要先开启sockets扩展,没有开启的话,无论如何都会报错。只需要在php.ini文件中找到sockets扩展并将其前面的分号删除能将其开启。


开启前:


;extension=sockets


开启后:


extension=sockets


开启完毕,接下来我们就可以进入正题了;首先,我们了解几个函数:


socket_create(AF_INET, SOCK_STREAM, SOL_TCP);//用于创建套接字
socket_bind( $this->master,$ip,$port);//用于绑定ip和端口
socket_listen( $this->master,1000);//用于调用connect连接的套接字和监听相关端口
socket_accept($this->master);//负责握手连接
socket_recv($socket, $buffer, 1024, 0);//从已连接的socket(客户端)接收数据
socket_write($socket,$upgrade,strlen($upgrade));//给单独客户端发送数据
send($message)//发送数据
socket_close($socket);//断开连接


很多步骤和PHP创建socket差不多,


不同主要在于socket_write使用和数据需要解、封帧,我们需要将http升级为websocket


http升级为websocket


if(preg_match("/Sec-WebSocket-Key: (.*)\r\n/",$buffer,$match)){
        $responseKey=base64_encode(sha1($match[1] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',true));
        $upgrade="HTTP/1.1 101 Switching Protocol\r\n".
                 "Upgrade: websocket\r\n".
                 "Connection: Upgrade\r\n".
                 "Sec-WebSocket-Accept:".$responseKey."\r\n\r\n";
                 socket_write($socket,$upgrade,strlen($upgrade));
        }


$socket是我们创建的连接,$buffer是客户端第一次连接时发送的数据


注意:Sec-WebSocket-Key: (.*)//括号和冒号之间是要有空格的


解帧:


        $len=$masks=$data=$decoded=null;
$len=ord($buffer[1]) & 127;
  
if($len === 126){
$masks=substr($buffer,4,4);
$data=substr($buffer, 8);
}else if($len === 127){
$masks=substr($buffer,10,4);
$data=substr($buffer, 14);
}else{
$masks=substr($buffer,2,4);
$data=substr($buffer, 6);
}
  
for($index = 0;$index<strlen($data);$index++){
$decoded.=$data[$index] ^ $masks[$index % 4];
}
return $decoded;


$buffer是客户端第一次连接时发送的数据


封帧:


      $len=strlen($message);
if($len<=125){
return "\x81".chr($len).$message;
}else if($len<=65535){
return "\x81".chr(126).pack("n",$len).$message;
}else{
return "\x81".chr(127).pack("xxxxN",$len).$message;
}


$message是我们需要发送的数据,前端连接前记得运行服务端,运行方式:


在cmd输入:


php 你的服务端PHP文件路径


运行前先配置环境变量:将你的PHP安装路径添加到Path中。


在php中搭建websocket环境之具体操作方法示例到这里就结束了,翼速应用平台内有更多相关资讯,欢迎查阅!


我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题