首先贴上参考的教程:
①: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否开启了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
websocket.html:
WebSocket协议的客户端程序
连接到WS服务器
向WS服务器发消息并接收消息
断开与WS服务器的连接
运行测试:
1. 在你Apache访问目录,我的在(apache的htdocs ),打开cmd(shift+右键,能看到在此目录打开powershell/命令行终端)
运行:php websocket.php
这样就可以开启了socket线程,等待客户端连接了。
2.浏览器访问:http://localhost/websocket_2.html,并F12打开浏览器控制台
3.先点击,连接服务器,在发送消息并接收,此后这次回话就结束了,所以你点断开没用。
至此已成功实现根据前端发送的数据,判断返回相应的json数据。但还有几点讨论跟大家说一下:
后续讨论:
1.你想一开始就初始化一个与服务器端的连接,可以参考④中的写法:
将:
wsClient = new WebSocket('ws://127.0.0.1:9999');
wsClient.onopen = function(){
console.log('WS客户端已经成功连接到服务器上')
}
写在最外层:
但是有个缺陷:你运行完发送消息之后,如果没有那个点击连接的按钮,那你只能重新刷新页面,因为运行之后就断开连接了。
其实能实现持续发送的,可以参考④,目前我没去改。
2.如果你的json从其他页面传过来,你需要注意编码,在代码中我也有提及,特别对中文,可以先用urlencode,在用urldecode例如我的:
3.未完待续,我会研究下怎么加载页面后,可以直接连续点发送消息,再断开连接操作。。