swoole-websocket 太过爱你忘了你带给我的痛 2023-06-13 04:37 43阅读 0赞 ## websocket ## 1. 打开官网,我们看到![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA_size_16_color_FFFFFF_t_70] 需要注意的是,其中的回调函数open与close不是填的,但是message这个回调方法是必须实现的,我们拿到上面的代码,直接复制,在/study 目录下新建一个websocket.php 文件 2. 我们继续在/study 目录下新建一个websocket.html文件,开始撰写相关的前端代码 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA_size_16_color_FFFFFF_t_70 1] 在上面的demo中,相关的js代码可以在websocket的资料中可以搜索的到,作用跟上面的备注相关联,这里需要注意的是 在js连接websocket中 url的前缀必须为ws:// 不能为http或https 3. 在这里需要补充一点,websocket是基于tcp的,在这里的区别,可以看相关资料:https://www.cnblogs.com/jiangzhaowei/p/8781635.html 这里有更详细的讲解,由于websocket是基于tcp我们需要需要打开之前撰写的http\_server.php 在Linux命令行中运行它 php http\_server.php 然后再执行刚刚撰写的websocket.php ![在这里插入图片描述][20191113180716453.png] ![在这里插入图片描述][20191113180824319.png] 然后我们打开域名,端口号为刚刚撰写的websocket中的端口,笔者这里的端口为9501,我们需要打开的网站为http\_server.php的端口:url:8811/websocket.html,需要一提的是,如果购买的是云服务器,不是本地的虚拟机,请开放安全组! ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA_size_16_color_FFFFFF_t_70 2] 4.由于websocket是基于tcp的连接,我们也可以在这里设置一个set方法调用,这样的好处是可以不在去启动Http\_server这个文件,单独跑websocket这个文件即可,我们只需要调用多一个set方法即可 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA_size_16_color_FFFFFF_t_70 3] 4. 优化websocket代码 如大家所看到的,上面的代码都是一些面向过程的代码,如果实际业务当中,业务简单的还好,如果是业务复杂的代码,这种面向过程的代码会非常头疼,我们对代码进行一下封装,对代码做一些简单的优化 <?php /** *websocket基础类 */ class WebSocket { //shot 仅允许本机运行为127.0.0.1 允许指定ip 则47.123.124.1 允许所有ip则为0.0.0.0 private static $host = '0.0.0.0'; //端口号 private static $port = 9501; //websocket初始化对象 public $socket = null; function __construct() { //websocket类 $this->socket = new Swoole\WebSocket\Server(self::$host, self::$port); //静态文件访问 $this->socket->set([ 'enable_static_handler' => true, //开启静态资源 'document_root' => '/study' //静态资源目录 ]); //建立建立执行 $this->socket->on('open',[$this,'onopen']); //接收客户端发送消息 $this->socket->on('message',[$this,'onmessage']); //关闭连接时执行此函数 $this->socket->on('close',[$this,'onclose']); //启动服务 $this->socket->start(); } /** *客户端与服务器建立连接并完成握手后会回调此函数 */ public function onopen($server,$request){ var_dump("server-success:{ $request->fd}\n"); } /** *当服务器收到来自客户端的数据帧时会回调此函数。 */ public function onmessage($server,$frame){ echo "receive from { $frame->fd}:{ $frame->data},opcode:{ $frame->opcode},fin:{ $frame->finish}\n"; $server->push($frame->fd,'date:'.date('Y-m-d H:i:s',time())); } /** *当服务器连接关闭时回调此函数 */ public function onclose($server,$fd){ var_dump("client: $fd end \n"); } } $obj = new WebSocket(); 上面就是我们优化之后的代码,直接运行该文件,一个简单的websocket就连接了 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA_size_16_color_FFFFFF_t_70]: https://img-blog.csdnimg.cn/20191113175259186.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA_size_16_color_FFFFFF_t_70 1]: https://img-blog.csdnimg.cn/20191115104758967.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA==,size_16,color_FFFFFF,t_70 [20191113180716453.png]: https://img-blog.csdnimg.cn/20191113180716453.png [20191113180824319.png]: https://img-blog.csdnimg.cn/20191113180824319.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA_size_16_color_FFFFFF_t_70 2]: https://img-blog.csdnimg.cn/20191113181134880.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA_size_16_color_FFFFFF_t_70 3]: https://img-blog.csdnimg.cn/2019111616362553.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyMDkwMA==,size_16,color_FFFFFF,t_70
还没有评论,来说两句吧...