PHP第一篇:PHP WebSocket实现前后端数据交互,亲测可用(windows+ apache2.4 +php5.6 )

首先贴上参考的教程

①:https://blog.csdn.net/lian772882/article/details/81386115(主)

②:https://www.cnblogs.com/saonian/p/5504456.html(理解原理)

③:https://www.cnblogs.com/isdom/p/webclips028.html(参考解码方法)

根据①实现了简单的前后端交互,但是,参考②和③5,我针对我的情况成功的增加了两点:

1.允许服务器返回JSON格式的数据

2.获取客户端发送的数据(这一条有许多教程都实现了,比如拿聊天室,或者这篇教程的大佬

④:https://blog.csdn.net/qq_38568388/article/details/78340750),但是由于我参考这个,原理都一样,但很多东西不好改(主要还是懒。。。)

 

贴一张websocket的工作原理(from②): 

                                                        PHP第一篇:PHP WebSocket实现前后端数据交互,亲测可用(windows+ apache2.4 +php5.6 )_第1张图片

再开始之前,先确认,你的php否开启了sockets扩展:

                                                              

websocket.php:

 125 && $length < 65536)
        $header = pack('CCn', $b1, 126, $length);
    elseif($length >= 65536)
        $header = pack('CCNN', $b1, 127, $length);
    return $header.$text;
}

//function ord_hex($data)  {
//    $msg = '';
//    $l = strlen($data);
//    for ($i= 0; $i<$l; $i++) {
//        $msg .= dechex(ord($data{$i}));
//    }
//    return $msg;
//}

?>

websocket.html:




  
  


  

WebSocket协议的客户端程序

运行测试:

1. 在你Apache访问目录,我的在(apache的htdocs ),打开cmd(shift+右键,能看到在此目录打开powershell/命令行终端)

运行:php websocket.php

                               PHP第一篇:PHP WebSocket实现前后端数据交互,亲测可用(windows+ apache2.4 +php5.6 )_第2张图片

这样就可以开启了socket线程,等待客户端连接了。

2.浏览器访问:http://localhost/websocket_2.html,并F12打开浏览器控制台

3.先点击,连接服务器,在发送消息并接收,此后这次回话就结束了,所以你点断开没用。

PHP第一篇:PHP WebSocket实现前后端数据交互,亲测可用(windows+ apache2.4 +php5.6 )_第3张图片

至此已成功实现根据前端发送的数据,判断返回相应的json数据。但还有几点讨论跟大家说一下:

后续讨论:

1.你想一开始就初始化一个与服务器端的连接,可以参考④中的写法:

将:

wsClient = new WebSocket('ws://127.0.0.1:9999');
wsClient.onopen = function(){
    console.log('WS客户端已经成功连接到服务器上')
}

写在最外层:

                           PHP第一篇:PHP WebSocket实现前后端数据交互,亲测可用(windows+ apache2.4 +php5.6 )_第4张图片

但是有个缺陷:你运行完发送消息之后,如果没有那个点击连接的按钮,那你只能重新刷新页面,因为运行之后就断开连接了。

其实能实现持续发送的,可以参考④,目前我没去改。

 

2.如果你的json从其他页面传过来,你需要注意编码,在代码中我也有提及,特别对中文,可以先用urlencode,在用urldecode例如我的:

                                                    PHP第一篇:PHP WebSocket实现前后端数据交互,亲测可用(windows+ apache2.4 +php5.6 )_第5张图片

3.未完待续,我会研究下怎么加载页面后,可以直接连续点发送消息,再断开连接操作。。

你可能感兴趣的:(js相关知识,php)