设为首页 加入收藏

TOP

php+websocket搭建简易聊天室实践(二)
2017-10-10 12:02:29 】 浏览:2271
Tags:php websocket 搭建 简易 聊天室 实践
sage
,strlen($new_message)); // socket_write(socket,$upgrade.chr(0), strlen($upgrade.chr(0))); //标记此套接字握手成功 $this->hand[(int)$client]=true; }

5、解析客户端的数据(我这里没有进行加密,如果有需要也可以自己加密 )

//解析数据
        public  function  decodeData($buff)
        {
            //$buff  解析数据帧
            $mask = array();  
            $data = '';  
            $msg = unpack('H*',$buff);  //用unpack函数从二进制将数据解码
            $head = substr($msg[1],0,2);  
            if (hexdec($head{1}) === 8) {  
                $data = false;  
            }else if (hexdec($head{1}) === 1){  
                $mask[] = hexdec(substr($msg[1],4,2));  
                $mask[] = hexdec(substr($msg[1],6,2));  
                $mask[] = hexdec(substr($msg[1],8,2));  
                $mask[] = hexdec(substr($msg[1],10,2));  
                   //遇到的问题  刚连接的时候就发送数据  显示 state connecting
                $s = 12;  
                $e = strlen($msg[1])-2;  
                $n = 0;  
                for ($i=$s; $i<= $e; $i+= 2) {  
                    $data .= chr($mask[$n%4]^hexdec(substr($msg[1],$i,2)));  
                    $n++;  
                }
                //发送数据到客户端
                   //如果长度大于125 将数据分块
                   $block=str_split($data,125);
                   $mess=array(
                       'mess'=>$block[0],
                       );
                return $mess;                   
            }

 

6、将套接字写入缓冲区

//发送数据
        public function send($mess,$v)
        {
            //遍历套接字数组 成功握手的  进行数据群发
            foreach ($this->socs as $keys => $values) {
                //用系统分配的套接字资源id作为用户昵称
                   $mess['name']="Tourist's socket:{$v}";
                   $str=json_encode($mess);
                   $writes ="\x81".chr(strlen($str)).$str;
                   // ob_flush();
                   // flush();
                   // sleep(3);
                   if($this->hand[(int)$values])
                       socket_write($values,$writes,strlen($writes));
               }
        }

 

7、运行方法

github地址git@github.com:rsaLive/websocket.git

①最好在控制台运行server.php

转到server.php脚本目录(可以先php -v 看下有没有配置php如果没有Linux配置下bash windows 配置下path)

php -f server.php

如果有错误会提示

②通过服务器访问html文件

 

 8、踩过的坑,打开调试工作方便查看错误

server.php 挂起的进程中可以打印输出的,如果出现问题可以在代码中加入打印来调试 

可以在各个判断里面做标记在控制台查看代码运行在哪个区间

不过每次修改完代码之后需要重新运行脚本 php server.php

如果出现这种错误可能是

  1、在与服务器初始套接字的时候发送数据 (在第一次与服务器验证握手的时候不能发送内容)

  2、如果已经验证过了但是客户端没有发送或者发送的消息为空也会出现这样的情况

    所以要检验已连接的套接字的数据

③可能浏览器不支持或者服务端没有开启socket开始之前最好验证下

if (window.WebSocket){
    console.log("This browser supports WebSocket!");
} else {
    console.log("This browser does not support WebSocket.");
}

 

如有不正欢迎指出

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Windows下Php安装mongodb扩展失败 下一篇(二)OJ的主要文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目