thinkphp 6.0 swoole扩展websocket使用教程

2022-10-11 21:46:27 200 0
魁首哥

ThinkPHP即将迎来最新版本6.0,针对目前越来越流行的Swoole,thinkphp也推出了最新的扩展think-swoole 3.0。

介绍

即将推出的tp6.0,已经适应了woole。并推出了think-swoole 3.0,并且已替换了socketio。和2.0版本在使用方法上有些许不同。

Websocket继承与Http,进行websocket连接之前需要一次HTTP请求,如果当期地址支持websocket则返回101,然后进行连接。并不是我的服务支持websocket后,请求每个连接地址都可以进行websocket连接,甚至需要预先适应才可以连接。

参数配置

 '服务器'=> ['主机'=>'0.0.0.0',//监听地址

        'port'=> 808,//监听端口

        'mode'=> SWOOLE_PROCESS,//运行模式默认为SWOOLE_PROCESS

        'sock_type'=> SWOOLE_SOCK_TCP,//袜子类型默认为SWOOLE_SOCK_TCP

        'options'=> ['pid_file'=> runtime_path()。'swoole.pid','log_file'=> runtime_path()。'swoole.log','daemonize'=> false,//通常,此值应根据您的cpu内核大1〜4倍。

            'reactor_num'=> swoole_cpu_num(),'worker_num'=> swoole_cpu_num(),'task_worker_num'=> 4,// swoole_cpu_num(),

            'enable_static_handler'=> true,'document_root'=> root_path('public'),'package_max_length'=> 20 * 1024 * 1024,'buffer_output_size'=> 10 * 1024 * 1024,'socket_buffer_size'=> 128 * 1024 * 1024,'max_request'=> 3000,'send_yield'=> true,

        ],

    ],'websocket'=> ['已启用'=> true,//开启websocket

        'handler'=> Handler :: class,//自定义wbesocket绑定类

        'parser'=> Parser :: class,//自定义解析类

        'route_file'=> base_path()。'websocket.php','ping_interval'=> 25000,'ping_timeout'=> 60000,'room'=> [''type'=> TableRoom :: class,'room_rows'=> 4096,'room_size'=> 2048, 'client_rows'=> 8192,'client_size'=> 2048,

        ],

    ],'auto_reload'=> true,'enable_coroutine'=> true,'resetters'=> [],'tables'=> [],  

handler和parser大大方便了自定义websocket服务,交替系统集成了socketio。

本文主要介绍如何使用socketio,这里假设大家有socketio有一定了解和使用基础。

socketIo默认会在请求地址后加相应的参数

同时,socketio至少在情况下,会认为http://url/是支持websocket服务的地址。

而在tp-swoole3.0内部已经该地址请求进行了处理

 <?phpnamespace think \ swoole \ websocket \ socketio;使用think \ Config;使用think \ Cookie;使用think \ Request;类控制器{protected $ transports = ['polling','websocket']; 公共功能升级(请求$ request,配置$ config,Cookie $ cookie)

    {如果(!in_array($ request-> param('transport'),$ this-> transports)){返回json(

                ['code'=> 0,'message'=>'未知运输,

                ],400

            );

        }如果($ request-> has('sid')){

            $ response = response('1:6');

        }其他{

            $ sid = base64_encode(uniqid());

            $ payload = json_encode(

                ['sid'=> $ sid,'upgrades'=> ['websocket'],'pingInterval'=> $ config-> get('swoole.websocket.ping_interval'),'pingTimeout'=> $ config-> get ('swoole.websocket.ping_timeout'),

                ]

            );

            $ cookie-> set('io',$ sid);

            $ response = response('97:0'。$ payload。'2:40');

        }返回$ response-> contentType('text / plain');

    } public function reject(请求$ request)

    {返回json(

            ['code'=> 3,'message'=>'错误请求',

            ],400

        );

    }

}  

TP6.0,插件注册采用了服务方式进行了注册,可在tp-swoole服务注册文件中查看路由注册信息,如果想自定义链接规则,则可以覆盖该路由。

 <?php // + -------------------------------------------- -------------------------- // | ThinkPHP [我们可以考虑一下] // + ------------------------------------- --------------------------------- // | | 版权所有(c)2006-2018 保留所有权利.// + ----------------------------- ----------------------------------------- // | | 许可()// + ----------------------------- ----------------------------------------- // | | 作者:yunwuxin <448901948@qq.com> // + ------------------------------------- ---------------------------------命名空间think \ swoole;将Swoole \ Http \ Server用作HttpServer;使用Swoole \ Websocket \ Server作为WebsocketServer;使用think \ App;使用think \ Route;使用think \ swoole \ command \ Server作为ServerCommand;使用think \ swoole \ facade \ Server;使用think \ swoole \ websocket \ socketio \ Controller; 使用think \ swoole \ websocket \ socketio \ Middleware;类服务扩展\ think \ Service {受保护的$ isWebsocket = false; / **

     * @var HttpServer | WebsocketServer

     * /

    受保护的静态$ server; 公共功能寄存器()

    {$ this-> isWebsocket = $ this-> app-> config-> get('swoole.websocket.enabled',false); $ this-> app-> bind(Server :: class,function(){if(is_null(static :: $ server)){$ this-> createSwooleServer();

            }返回static :: $ server;

        }); $ this-> app-> bind('swoole.server',Server :: class); $ this-> app-> bind(Swoole :: class,function(App $ app){返回新的Swoole($ app);

        }); $ this-> app-> bind('swoole',Swoole :: class);

    }公共功能启动(Route $ route)

    {$ this-> commands(ServerCommand :: class); 如果($ this-> isWebsocket){

            $ route-> group(function()use($ route){

                $ route-> get('socket.io/','@upgrade');

                $ route-> post('socket.io/','@reject');

            })->前缀(Controller :: class)->中间件(Middleware :: class);

        }

    } / **

     *创建Swoole服务器。

     * /

    受保护的函数createSwooleServer()

    {

        $ server = $ this-> isWebsocket吗?WebsocketServer :: class:HttpServer :: class;

        $ config = $ this-> app-> config;

        $ host = $ config-> get('swoole.server.host');

        $ port = $ config-> get('swoole.server.port');

        $ socketType = $ config-> get('swoole.server.socket_type',SWOOLE_SOCK_TCP);

        $ mode = $ config-> get('swoole.server.mode',SWOOLE_PROCESS); static :: $ server = new $ server($ host,$ port,$ mode,$ socketType);

        $ options = $ config-> get('swoole.server.options'); static :: $ server-> set($ options);

    }

}  

套接字使用演示

 <!DOCTYPE html>  

    

    标题</ title></font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    <script src =“ ./ static / js / socket.io.js”> </ script> </ head> <body> <script></font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    const socket = io('http:// localhost:808');</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    socket.emit(“ test”,“您的消息”);</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    socket.on(“ test”,function(res){console.log(res)}); </ script> </ body> </ html></font></font> </code> </pre>
<p style="text-align: start">Websocket路由配置方法 </p>
<p style="text-align: start">在app目录下新建websocket.php文件,其中需要注意,由于使用了反射,闭包参数名称不能随意定义,不然无法注入。第一个参数是websocket,是当前websocket的服务器对象,第二个参数data是客户端发送的数据。其中,socketio发出的第一个参数和Websocket :: on的第一个参数一致,作为事件名称。 </p>
<pre> <code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><?php / **</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

 *作者:Xavier Yang</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

 *日期:2019/6/5</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

 *电子邮件:499873958@qq.com</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

 * /使用\ think \ swoole \ facade \ Websocket;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

Websocket :: on(“ test”,function(\ think \ swoole \ Websocket $ websocket,$ data){// var_dump($ class);</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    $ websocket-> emit(“ test”,“ asd”);</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

});</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

Websocket :: on(“ test1”,函数($ websocket,$ data){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    $ websocket-> emit(“ test”,“ asd”);</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

});</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

Websocket :: on(“ join”,function(\ think \ swoole \ Websocket $ websocket,$ data){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    $ websocket-> join(“ 1”);</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

});</font></font> </code> </pre>
 <a href="https://www.zhihuclub.com/wp-content/uploads/2022/08/1659799092.jpg" data-fancybox="images"><img src="https://www.zhihuclub.com/wp-content/uploads/2022/08/1659799092.jpg"  //></a></p>
<p class="pgc-img-caption">
</p>
<p style="text-align: start">tp-swoole3.0同时还有许多其他的新功能,这些功能需要大家去摸索尝试。 </p>
<p style="text-align: start">我也会在接下来的文章中,一起与大家分享我的使用过程。 </p>
<p style="text-align: start"> </p>
<p style="text-align: start"> <strong>以上内容希望帮助到大家, </strong>很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 <strong>,需要的可以加入 </strong>我的官方群。 </p>
<p style="text-align: start"> </p>
 <a href="https://www.zhihuclub.com/wp-content/uploads/2022/08/1659799092-1.jpg" data-fancybox="images"><img src="https://www.zhihuclub.com/wp-content/uploads/2022/08/1659799092-1.jpg"  //></a></p>
<p class="pgc-img-caption">
</p>

		    </div>
	            <div class="zhi-con-tag"><a href="https://mip.qiaqa.com/tags/swoole.html">swoole</a><a href="https://mip.qiaqa.com/tags/thinkphp.html">thinkphp</a><a href="https://mip.qiaqa.com/tags/websocket.html">websocket</a></div>
                <div class="zhi-con-action">
                <div class="zhi-con-action-item">
                                                            <div class="action-button likesBtn" id="likes-148586"><i class="ri-heart-3-line"></i> 喜欢 0</div>
                                        <div class="icon-button favsBtn" id="favs-148586">
                                                <i class="ri-star-line"></i> 收藏
                                            </div>
                    <div class="icon-button fenBtn"><i class="ri-share-circle-line"></i> 分享
                    <div class="fenxme"><span class="menu-arrow"></span>
                        <ul>
                        <li><a href="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://mip.qiaqa.com/php/148586.html&title=thinkphp+6.0+swoole%E6%89%A9%E5%B1%95websocket%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&desc=ThinkPHP%E5%8D%B3%E5%B0%86%E8%BF%8E%E6%9D%A5%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC6.0%EF%BC%8C%E9%92%88%E5%AF%B9%E7%9B%AE%E5%89%8D%E8%B6%8A%E6%9D%A5%E8%B6%8A%E6%B5%81%E8%A1%8C%E7%9A%84Swoole%EF%BC%8Cthinkphp%E4%B9%9F%E6%8E%A8%E5%87%BA%E4%BA%86%E6%9C%80%E6%96%B0%E7%9A%84%E6%89%A9%E5%B1%95think-swoole3.0%E3%80%82%E4%BB%8B%E7%BB%8D%E5%8D%B3%E5%B0%86%E6%8E%A8%E5%87%BA%E7%9A%84tp6.0%EF%BC%8C%E5%B7%B2%E7%BB%8F%E9%80%82%E5%BA%94%E4%BA%86...&summary=ThinkPHP%E5%8D%B3%E5%B0%86%E8%BF%8E%E6%9D%A5%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC6.0%EF%BC%8C%E9%92%88%E5%AF%B9%E7%9B%AE%E5%89%8D%E8%B6%8A%E6%9D%A5%E8%B6%8A%E6%B5%81%E8%A1%8C%E7%9A%84Swoole%EF%BC%8Cthinkphp%E4%B9%9F%E6%8E%A8%E5%87%BA%E4%BA%86%E6%9C%80%E6%96%B0%E7%9A%84%E6%89%A9%E5%B1%95think-swoole3.0%E3%80%82%E4%BB%8B%E7%BB%8D%E5%8D%B3%E5%B0%86%E6%8E%A8%E5%87%BA%E7%9A%84tp6.0%EF%BC%8C%E5%B7%B2%E7%BB%8F%E9%80%82%E5%BA%94%E4%BA%86..." target="_blank" title="分享空间"><i class="ri-qq-fill"></i> 分享空间</a></li>
                        <li><a class="weibo-share" href="https://service.weibo.com/share/share.php?url=https://mip.qiaqa.com/php/148586.html&title=thinkphp+6.0+swoole%E6%89%A9%E5%B1%95websocket%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&pic=&appkey=&searchPic=true" target="_blank" title="分享微博"><i class="ri-weibo-fill"></i> 分享微博</a></li>
                        <li><span class="ewm"><img src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/function/api.php?act=poster&url=https://mip.qiaqa.com/php/148586.html" alt="https://mip.qiaqa.com/php/148586.html" /></span><span>手机扫一扫</span></li>
                        </ul>
                    </div>
                    </div>
                    <div class="action-hai"><span class="haibao" id="148586"><i class="ri-camera-lens-line"></i> 海报</span></div>                    <div class="action-eyes"><i class="ri-message-2-line"></i> 0 条评论</div>                    <div class="action-eyes"><i class="ri-eye-line"></i> 200</div>
            </div>
        </div>
                <section class="zhi-prevnext"> 
            <a href="https://mip.qiaqa.com/php/148585.html" title="上一篇:「PHP」常用的数组键值操作函数,面试重点">上一篇:「PHP」常用的数组键值操作函数,面试重点</a>            <a href="https://mip.qiaqa.com/php/148588.html" title="下一篇:想要让面试官印象深刻,两个PHP技巧受用无穷">下一篇:想要让面试官印象深刻,两个PHP技巧受用无穷</a>        </section>
            </div>
    <div class="zhi-wd-xiang">
        <h3>相关文章</h3>
        <ul>
                                                        <li><a href="https://mip.qiaqa.com/ask/198858.html" target="_blank">php如何让Swoole/Pool进程池实现Redis持久连接</a></li>
                                <li><a href="https://mip.qiaqa.com/ask/198855.html" target="_blank">如何快速解决ThinkPHP5.1出现MISS缓存未命中问题</a></li>
                                <li><a href="https://mip.qiaqa.com/php/149333.html" target="_blank">php进阶到架构之swoole系列教程(一)windows安装swoole</a></li>
                                <li><a href="https://mip.qiaqa.com/php/149228.html" target="_blank">Swoole就能实现高性能HTTP服务器</a></li>
                                <li><a href="https://mip.qiaqa.com/php/149167.html" target="_blank">在linux下添加PHP扩展通讯swoole的安装</a></li>
                                <li><a href="https://mip.qiaqa.com/php/148930.html" target="_blank">小编带你快速入门swoole框架</a></li>
                                <li><a href="https://mip.qiaqa.com/php/148929.html" target="_blank">php引用计数基本知识,划重点要考的</a></li>
                                <li><a href="https://mip.qiaqa.com/php/148843.html" target="_blank">php有哪些运行环境?每个都有不同的特点,适合不同的系统</a></li>
                                <li><a href="https://mip.qiaqa.com/php/148803.html" target="_blank">使用 Swoole 来加速你的 Laravel 应用</a></li>
                                <li><a href="https://mip.qiaqa.com/php/148765.html" target="_blank">Swoole 5.0 不再使用 PSR-0 下划线风格的类名</a></li>
                                    </ul>
    </div>
        <div class="zhi-wd-comm">
                <div class="zhi-wd-comm-count">
                <p style="text-align: center;">本站已关闭游客评论,请登录或者注册后再评论吧~</p>
                        </div>
        <label id="AjaxCommentBegin"></label>
                        <div class="cat-comments">
            <label id="AjaxCommentBegin"></label>
            <label id="AjaxCommentEnd"></label>
        </div>
    </div>
    </div>                    </div>
        <div class="zhi-right">
    <div class="side-box">
        
<div class="widget" id="divPrevious">
        <h3>最近发表</h3>
            <ul>
        <li><a title="新能源车充电桩的作用是什么(科普几个新能源汽车充电桩的小知识)" href="https://mip.qiaqa.com/a/273403.html">新能源车充电桩的作用是什么(科普几个新能源汽车充电桩的小知识)</a></li>
<li><a title="驭胜s330汽车之家(爆款潜质初显驭胜S330月销升至七千辆)" href="https://mip.qiaqa.com/a/273402.html">驭胜s330汽车之家(爆款潜质初显驭胜S330月销升至七千辆)</a></li>
<li><a title="喵哥手把手教你自己换衣服(喵哥手把手教你自己换)" href="https://mip.qiaqa.com/a/273401.html">喵哥手把手教你自己换衣服(喵哥手把手教你自己换)</a></li>
<li><a title="汽车钥匙电池推荐在网上买吗(汽车钥匙电池选购攻略)" href="https://mip.qiaqa.com/a/273400.html">汽车钥匙电池推荐在网上买吗(汽车钥匙电池选购攻略)</a></li>
<li><a title="更换汽车钥匙电池步骤(换汽车钥匙电池有这么多的讲究)" href="https://mip.qiaqa.com/a/273399.html">更换汽车钥匙电池步骤(换汽车钥匙电池有这么多的讲究)</a></li>
<li><a title="汽车遥控钥匙新换的电池不耐用(汽车遥控钥匙功能与电池寿命和更换)" href="https://mip.qiaqa.com/a/273398.html">汽车遥控钥匙新换的电池不耐用(汽车遥控钥匙功能与电池寿命和更换)</a></li>
<li><a title="南孚汽车遥控器电池怎么样(南孚发布性能最强车钥匙电池)" href="https://mip.qiaqa.com/a/273397.html">南孚汽车遥控器电池怎么样(南孚发布性能最强车钥匙电池)</a></li>
<li><a title="车钥匙电池一般用多长时间(车钥匙的电池使用周期是多久)" href="https://mip.qiaqa.com/a/273396.html">车钥匙电池一般用多长时间(车钥匙的电池使用周期是多久)</a></li>
<li><a title="起亚汽车钥匙电力不足的表现(汽车遥控钥匙能用多久)" href="https://mip.qiaqa.com/a/273395.html">起亚汽车钥匙电力不足的表现(汽车遥控钥匙能用多久)</a></li>
<li><a title="吉利四缸机最新消息(600元升级车机是福利)" href="https://mip.qiaqa.com/a/273394.html">吉利四缸机最新消息(600元升级车机是福利)</a></li>
    </ul>
    </div><div class="widget" id="divzhihotcon">
        <h3>热评文章</h3>
            <ul>
        <li><a href="https://mip.qiaqa.com/baike/112130.html" title="保利为什么叫央企之王(保利是国企还是央企)">保利为什么叫央企之王(保利是国企还是央企)</a></li><li><a href="https://mip.qiaqa.com/jingyan/16928.html" title="恢复外国人入境时间表(中国取消14天隔离政策了吗)">恢复外国人入境时间表(中国取消14天隔离政策了吗)</a></li><li><a href="https://mip.qiaqa.com/hot/7442.html" title="香港哪些明星是反港分子(已背叛祖国的明星名单)被国家拉入黑名单明星">香港哪些明星是反港分子(已背叛祖国的明星名单)被国家拉入黑名单明星</a></li><li><a href="https://mip.qiaqa.com/jingyan/33703.html" title="身份造假与销售话术(记者卧底世纪佳缘 揭秘“红娘”)">身份造假与销售话术(记者卧底世纪佳缘 揭秘“红娘”)</a></li><li><a href="https://mip.qiaqa.com/jingyan/20393.html" title="PyCharm怎么连接配置mysql数据库?">PyCharm怎么连接配置mysql数据库?</a></li><li><a href="https://mip.qiaqa.com/baike/36524.html" title="如何将cda格式文件转换为mp3格式(cda格式怎么转换成mp3)">如何将cda格式文件转换为mp3格式(cda格式怎么转换成mp3)</a></li>    </ul>
    </div><div class="widget" id="divzhihotart">
        <h3>热门文章</h3>
            <ul>
        <li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/baike/112130.html" title="保利为什么叫央企之王(保利是国企还是央企)"><img src="https://mip.qiaqa.com/zb_users/cache/thumbs/a4779cbcdac7ebf6224393945dc33957-260-180-1.jpg" alt="保利为什么叫央企之王(保利是国企还是央企)" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/baike/112130.html" title="保利为什么叫央企之王(保利是国企还是央企)">保利为什么叫央企之王(保利是国企还是央企)</a></h4><p><i class="ri-time-line"></i> 2022-07-06</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/jingyan/16928.html" title="恢复外国人入境时间表(中国取消14天隔离政策了吗)"><img src="https://mip.qiaqa.com/zb_users/cache/thumbs/2578fae51899089a615b5ec61a885c5b-260-180-1.jpg" alt="恢复外国人入境时间表(中国取消14天隔离政策了吗)" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/jingyan/16928.html" title="恢复外国人入境时间表(中国取消14天隔离政策了吗)">恢复外国人入境时间表(中国取消14天隔离政策了吗)</a></h4><p><i class="ri-time-line"></i> 2021-06-19</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/hot/7442.html" title="香港哪些明星是反港分子(已背叛祖国的明星名单)被国家拉入黑名单明星"><img src="https://mip.qiaqa.com/zb_users/cache/thumbs/44a6f75b2e0362ab2099e5c6777ebfa5-260-180-1.jpg" alt="香港哪些明星是反港分子(已背叛祖国的明星名单)被国家拉入黑名单明星" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/hot/7442.html" title="香港哪些明星是反港分子(已背叛祖国的明星名单)被国家拉入黑名单明星">香港哪些明星是反港分子(已背叛祖国的明星名单)被国家拉入黑名单明星</a></h4><p><i class="ri-time-line"></i> 2021-04-20</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/jingyan/33703.html" title="身份造假与销售话术(记者卧底世纪佳缘 揭秘“红娘”)"><img src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/var/nopic.png
" alt="身份造假与销售话术(记者卧底世纪佳缘 揭秘“红娘”)" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/jingyan/33703.html" title="身份造假与销售话术(记者卧底世纪佳缘 揭秘“红娘”)">身份造假与销售话术(记者卧底世纪佳缘 揭秘“红娘”)</a></h4><p><i class="ri-time-line"></i> 2021-12-08</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/jingyan/20393.html" title="PyCharm怎么连接配置mysql数据库?"><img src="https://mip.qiaqa.com/zb_users/cache/thumbs/a3b0b48ade92d5e11fe516f869de5d1d-260-180-1.jpg" alt="PyCharm怎么连接配置mysql数据库?" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/jingyan/20393.html" title="PyCharm怎么连接配置mysql数据库?">PyCharm怎么连接配置mysql数据库?</a></h4><p><i class="ri-time-line"></i> 2021-06-29</p></div></li><li><div class="zhihotcon-img"><a target="_blank" href="https://mip.qiaqa.com/baike/36524.html" title="如何将cda格式文件转换为mp3格式(cda格式怎么转换成mp3)"><img src="https://mip.qiaqa.com/zb_users/cache/thumbs/e93e1dd991aafa07edab580414a8e1ea-260-180-1.jpg" alt="如何将cda格式文件转换为mp3格式(cda格式怎么转换成mp3)" /></a></div><div class="zhihotcon-title"><h4><a href="https://mip.qiaqa.com/baike/36524.html" title="如何将cda格式文件转换为mp3格式(cda格式怎么转换成mp3)">如何将cda格式文件转换为mp3格式(cda格式怎么转换成mp3)</a></h4><p><i class="ri-time-line"></i> 2021-12-11</p></div></li>    </ul>
    </div>        </div>
</div>    </div>
    
<div class="zhi-user-modal">
    <div class="zhi-user-modal-container">
        <ul class="zhi-switcher">
            <li><a href="javascript:void(0);">用户登录</a></li>
            <li><a href="javascript:void(0);">注册新用户</a></li>
        </ul>
        <div id="zhi-login">
            <form method="post" action="#" class="zhi-form">
                <p class="fieldset">
                    <label class="image-replace zhi-username" for="edtUserName">用户名</label>
                    <input type="text" class="full-width has-padding has-border" placeholder="用户名" id="edtUserName" name="edtUserName" size="20" value="" tabindex="1" />
                </p>
                <p class="fieldset">
                    <label class="image-replace zhi-password" for="edtPassWord">密码</label>
                    <input type="password" class="full-width has-padding has-border" placeholder="密码" id="edtPassWord" name="edtPassWord" size="20" tabindex="2" />
                </p>
                <p class="fieldset">
                    <input type="checkbox" name="chkRemember" id="chkRemember"  tabindex="98" />
                    <label for="chkRemember">记住登录状态</label>
                    <a class="fieldsetrig" href="https://mip.qiaqa.com/?user=repass">忘记密码?</a>
                </p>
                <p class="fieldset">
                    <input id="btnPost" name="btnPost" type="submit" value="登录" class="full-width" tabindex="99"/>
                    <input type="hidden" name="username" id="username" value="" />
                    <input type="hidden" name="password" id="password" value="" />
                    <input type="hidden" name="savedate" id="savedate" value="1" />
                </p>
            </form>
                    </div>
        <div id="zhi-singup">
            <form method="post" action="#" class="zhi-form" id="formsing">
                <p class="zhi-singup-set">
                    <label class="image-replace zhi-username">用户名</label>
                    <input class="full-width has-padding has-border" id="zhanghao" name="zhanghao" type="text" placeholder="输入用户名">
                </p>
                <p class="zhi-singup-set">
                    <label class="image-replace zhi-email">邮箱</label>
                    <input class="full-width has-padding has-border" id="email" name="email" type="text" placeholder="输入mail">
                </p>
                <p class="zhi-singup-set">
                    <label class="image-replace zhi-password">密码</label>
                    <input class="full-width has-padding has-border" id="zpassword" name="zpassword" type="password" placeholder="输入密码">
                </p>
                <p class="zhi-singup-set">
                    <label class="image-replace zhi-password">确认密码</label>
                    <input class="full-width has-padding has-border" id="repassword" name="repassword" type="password" placeholder="确认密码">
                </p>
                <p class="zhi-singup-set">
                    <input name="code" type="text" maxlength="6" class="form-control" placeholder="图形验证码" autocomplete="off" required="">
                    <span class="fieldset-code" style="width:96px;">
                        <img src="https://mip.qiaqa.com/zb_system/script/c_validcode.php?id=singin" id="singin" onclick="javascript:this.src='https://mip.qiaqa.com/zb_system/script/c_validcode.php?id=singin&tm='+Math.random();" alt="图形验证码"/>
                    </span>
                </p>
                <p class="zhi-singup-set">
                    <input type="checkbox" name="xieyi" id="xieyi" tabindex="98" />
                    <label for="xieyi">我已阅读并同意 <a href="">用户协议</a></label>
                </p>
                <p class="zhi-singup-set">
                    <input id="btnSin" class="full-width" type="submit" value="注册新用户">
                </p>
            </form>
        </div>
        <a href="javascript:void(0);" class="zhi-close-form"></a>
    </div>
</div>
<div class="zhiback" id="zhiback">
    <div class="askBox">
        <div class="ask-group">
            <form action="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/function/cmd.php?act=ask" method="POST" id="formask">
                <div class="ask-item">
                    <div class="ask-item-img">
                        <img src="https://mip.qiaqa.com/zb_users/avatar/0.png?1688683078" alt="" />
                    </div>
                    <input type="text" id="asktitle" name="asktitle" placeholder="请输入问题标题">
                </div>
                <div class="ask-item">
                    <textarea name="askcon" id="askcon"> 请输入问题背景及详细信息... </textarea>
                </div>
                <div class="ask-footer">
                    <div class="ask-item-as">
                        <input type="hidden" name="csrfToken" value="b9e79bed36c75460ee0e162c49e1b92b">
                        <input type="submit" class="ask-item-btn" value="发布" />
                    </div>
                </div>
            </form>
        </div>
        <button aria-label="关闭" type="button" class="ask-close"><i class="ri-close-line"></i></button>
    </div>
</div>
<div id="backbox" class="backbox">
    <div class="back genight"><i class="ri-sun-fill"></i></div>
    <div class="back" id="totop"><i class="ri-arrow-up-s-line"></i></div>
</div>
<div class="zhi-menu-m">
    <button type="button" class="btn-close" aria-label="Close"><i class="ri-close-line"></i></button>
    <div class="logo">
        <a href="https://mip.qiaqa.com/"><img src="https://mip.qiaqa.com/logo.png" alt="恰卡编程网"/></a>
    </div>
    <div class="zhi-menu-search">
        <form name="search" method="post" action="https://mip.qiaqa.com/zb_system/cmd.php?act=search">
            <input name="q" size="11" class="zhi-menu-search-input" type="text" placeholder="请输入关键词" autocomplete="off">
            <button class="zhi-menu-search-submit" type="submit"><i class="ri-search-2-line"></i></button>
        </form>
    </div>
    <nav id="mnav"></nav>
</div>
<footer class="zhi-footer">
    <div class="inner">
                <div class="zhi-footer-center">
            <div class="footer-center-left">
                                <p class="footer-center-info">
                                恰卡编程网--程序员编程资料和编程经验分享平台,从入门到进阶,非常详细。学习Java级其他网络编程语言的人很多,借助本站教程,相信你能很快精通并出类拔萃。                                </p>
            </div>
            <div class="footer-center-right">
                <div class="footer-center-weixin">
                    <img src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/include/ewm.png" alt="微信公众号"/>
                </div>
                <div class="zhi-footer-tubiao">
                    <ul>
                        <li>
                            <a href="https://weibo.com/" target="_blank"><i class="ri-weibo-fill"></i></a>
                        </li>
                        <li>
                            <a href="http://wpa.qq.com/msgrd?v=3&uin=5733401&site=im.qq.com&menu=yes" target="_blank"><i class="ri-qq-fill"></i></a>
                        </li>
                        <li>
                            <a href="mailto:5733401@qq.com"><i class="ri-mail-line"></i></a>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
                        <div class="zhi-footer-bottom">
            <p>Copyright © 2018-2022 恰卡网 qiaqa.com 版权所有                <a rel="nofollow" class="ico-ico" href="http://www.beian.gov.cn/portal/recordQuery?token=9c5a0517-c8ae-4a6b-b2c7-0dbf41cd45f0" target="_blank">苏ICP备18042295号</a>
                </p>
        </div>
    </div>
</footer>
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?a88faa5532b1e037da0ed2f1324c3674";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
<script>
        (function(){
            var bp = document.createElement('script');
            var curProtocol = window.location.protocol.split(':')[0];
            if (curProtocol === 'https'){
                bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
            }
            else{
                bp.src = 'http://push.zhanzhang.baidu.com/push.js';
            }
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(bp, s);
        })();
        </script><link href="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/style/css/fanbox.css" rel="stylesheet" type="text/css" />
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/lightbox.js"></script>
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/jquery.form.js"></script>
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/zhimedia.js?v=1.3.3"></script>
    </body>
</html><!-- 缓存生成时间: 2023-07-07 06:37:57 by ZBlogCache 0.03 ms , 0 query , 842kb memory , 0 error -->