用Websocket聊天完整demo,做笔记用,各位大佬多多指教

本文详细记录了使用WebSocket技术构建一个实时聊天应用的过程,包括前端与后端的交互,以及jQuery库的应用。通过这个实战项目,读者可以了解WebSocket的基本用法及其在实际开发中的应用。
摘要由CSDN通过智能技术生成
//企业端
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200806160850444.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RhMTU5NDE4NA==,size_16,color_FFFFFF,t_70#pic_center)

<html>



<head>

    <title>直聊</title>

    <meta http-equiv="Content-Type" content="text/html;  charset=gb2312" />

    <meta name="author" content="https://blog.csdn.net/q475254344">

    <link href="../css/chat.css" rel="stylesheet">

    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css"
        integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">

    <script src="../js/jquery.min.js"></script>

    <script src="../js/core.ajaxpanel.js"></script>//图片上传插件js文件
    <script src="../js/commonURL.js" type="text/javascript" charset="gb2312"></script> //动态拼接域名
    <script src="../js/jform.js"></script>//wuyong

</head>

<style>
    #ajaxForm {
   

        height: 55px;

    }

    #images_text {
   

        max-width: 75px;

        left: 0;

        top: 0;

        right: 0;

        bottom: 0;

        margin: auto;

        max-height: 150px;

        padding-left: 10px;

    }



    .overlay {
   

        display: block;

        position: absolute;

        top: 0%;

        left: 0%;

        width: 100%;

        height: 100%;

        background-color: black;

        z-index: 9998;

        -moz-opacity: 0.8;

        opacity: 1;

        filter: alpha(opacity=20);

    }



    .overlay_none {
   

        display: none;

    }



    .max_imgs {
   

        max-width: 800px;

        max-height: 800px;

        position: fixed;

        left: 25%;

        top: 5%;





    }

    .linkman {
   
        padding: 0 5px 0 7px;

    }
</style>



<body class="box">

    <div class="overlay_none" id="overlay" onclick="imgageNone()">

        <input type="text" class="identification" value="1" style="display: none;" />

        <img class="max_imgs" src="http://api.qyxdrc.com/storage/chatimg/qNQA8rGikHXhPIKKwBBIpVyhhyGLkruebzH0McLi.jpeg"
            alt="">

    </div>

    <div class="container">

        <div class="chatbox">

            <div class="chatleft">

                <div class="top">

                    <!-- <i class="fas fa-bars" style="font-size: 1.4em"></i> -->

                    <!-- <input type="text" placeholder="search" style="width: 140px; height: 36px; margin-left: 25px;"> -->

                    <!-- <button class="searchbtn"></style><i class="fas fa-search"></i></button> -->

                    <div style="font-size: 14px;display: flex;align-items: center;">
                        <image style="width: 20px;height: 20px;"
                            src="https://api.qyxdrc.com/storage/mini_img/tubiaos/zaixian.png" mode="aspectFill" /> <span
                            class="linkman">0</span>个联系人
                    </div>


                </div>

                <div class="center_in">

                    <ul class="center_ul">



                    </ul>

                </div>

            </div>

            <div class="chatright">

                <div class="top infolist">

                    <img style="border-radius: 20px; vertical-align: middle;width: 40px;height: 40px;" class="logo_img"
                        src="">

                    <span style="margin-left: 20px;" class="logo_text"></span>

                    <i class="fas fa-ellipsis-v"
                        style="font-size: 1.4em; position: absolute; right: 20px; color: gray;cursor: pointer;"
                        onclick="showHide()"></i>
                    <input type="text" id="showHide" value="1" style="display: none;">

                </div>
                <div class="position_josv">
                    <span> 沟通职位 </span> <span class="name_in"> 未填 </span> <span style="padding: 0 2px;"
                        class="money_num">未知 </span> <span class="region"></span>
                </div>
                <div class="center">

                    <ul class="msgleft_ul">

                        <!-- 聊天记录 -->

                    </ul>

                </div>

                <div class="top_info">

                    <div class="function_list">

                        <a href="javascript:void(0)" title="常用语"><img src="../images/chang.png" alt=""
                                class="function_img" id="function_img" onclick="setLongTerm()"></a>

                        <a href="javascript:void(0)" title="交换手机号"><img src="../images/phone.png" alt=""
                                class="function_img" onclick="getPhone()"></a>

                        <a href="javascript:void(0)" title="交换微信号"><img src="../images/wechat.png" alt=""
                                class="function_img" onclick="getWeChat()"></a>

                        <a href="javascript:void(0)" title="面试邀请"><img src="../images/mianshi.png" alt=""
                                class="function_img" id="btn"></a>

                        <a href="javascript:void(0)" title="创建多人视频面试房间"><img src="../images/remote.png" alt=""
                                class="function_img" id="video" onclick="manyVideo()"></a>

                        <a href="javascript:void(0)" title="AI面试"><img src="../images/aivideo.png" alt=""
                                class="function_img" id="video" onclick="aIVideoS()"></a>

                        <a href="javascript:void(0)" title="短信通知"><img src="../images/duanxin.png" alt=""
                                class="function_img" onclick="setBote()"></a>

                        <form id="ajaxForm" method="post" enctype="multipart/form-data">

                            <label for="file" class="cursor-pointer" style="height: 80px;">

                                 <img class="function_img" title="发送图片" style="cursor: pointer;"
                                    src="../images/tupian.png">

                            </label>

                            <input type="file" id="file" name="chatimg" class="dn" style="display: none;" />

                        </form>
                        <a href="javascript:void(0)" title="更换职位"><img src="../images/zhiweijiaohuan.png" alt=""
                                class="function_img" onclick="updateInformation()"></a>
                        <a href="javascript:void(0)" title="发送office"><img src="../images/offer1.png" alt=""
                                class="function_img" onclick="officeMation()"></a>

                    </div>

                    <input type="text" class="biaoshi" value="1" style="display: none;" />

                    <div class="long_term" id="hide">



                    </div>

                </div>

                <div class="footer">

                    <textarea id="textarea_messge" maxlength="800" rows="5" cols="40"
                        style="width: 100%; resize: none; border: none;height:75%; padding-left: 15px;padding-right: -20px;"
                        placeholder="请在此输入要发送的内容..." onfocus="textareaFocus()"></textarea>

                    <button onclick="myFunction()" class="sendbtn">发送</button>



                </div>

            </div>

            <div class="chatrihtml">

                <div class="logo_imagers">

                    <img class="logo_img"
                        src="http://api.qyxdrc.com/storage/avatar/vBV8wCaxIyFcJN9mwABBAyjHH2cZnYgoaAXWhltC.jpeg"
                        style="width: 60px;height: 60px;border-radius: 50%;">

                    <span class="companyname"></span>

                </div>

                <div class="hiring">

                    <span class="expectation">招聘岗位:</span>

                    <span class="jobs_name"></span>

                </div>

                <div class="welfare_conditions">



                </div>

                <div class="responsibility">

                    <span class="responsibility_title">岗位职责:</span>

                    <text class="responsibility_text" class="" selectable="false" space="false" decode="false"></text>

                </div>

                <div class="communication_date">

                    <span class="responsibility_date" style="padding-right: 15px;">042910:
                        24</span><span>由你发起了沟通</span>

                </div>

            </div>

        </div>

    </div>

    <div id="choiceWindow">

        <label id="x" style="position: absolute;top:2px;left: 95%;font-size: 25px;">x</label>

        <div class="innerbodywrapper" style="margin-bottom: 10px">

            <b style="line-height: 40px; font-size: 18px;">发送面试邀请</b>

            <div class="form-item">

                <div id="tag" class="form-tab-wrap">

                    <div class="text_interview">

                        <i>*</i><span>面试职位: </span>

                        <div class="select">

                            <select id="position" onchange="positionData()">

                                <option value="">请选择</option>

                            </select>

                        </div>

                    </div>

                    <div class="text_interview">

                        <i>*</i><span>面试时间: </span>

                        <input type="datetime-local" id="jobtoptime" />

                    </div>

                    <div class="text_interview">

                        <i>*</i><span>面试地点: </span>

                        <input type="text" id="site" />

                    </div>

                    <div class="text_interview">

                        <i>*</i><span>联系人: </span>

                        <input type="text" id="linkman" />

                    </div>

                    <div class="text_interview">

                        <i>*</i><span>联系电话: </span>

                        <input type="text" id="telephone_in" />

                    </div>

                </div>

            </div>

        </div>

        <div class="form-item tc" style="text-align: center;">

            <input type="submit" name="" value="发送" onclick="subSave()" class="form-submit-primary" />

        </div>

    </div>
    <div id="informationWindow">

        <div style="position: relative;height: 100%;">
            <image id="shut" src="./../images/sss.png"
                style="width: 20px;height: 20px;position: absolute;top:10px;left: 95%;font-size: 25px;" />
            <div class="innerbodywrapper" style="margin-bottom: 10px">

                <b style="line-height: 40px; font-size: 18px;">更换职位</b>

                <div class="form-item">
                    <div class="information">

                    </div>


                </div>

            </div>

            <div class="form-item tc" style="text-align: center;padding-top: 30px;">

                <input type="submit" name="" value="更改" onclick="informationSave(this)" class="form-submit-primary" />

            </div>
        </div>

    </div>
    <div id="officeWindow">

        <!-- <label id="of" style="position: absolute;top:2px;left: 95%;font-size: 25px;">x</label> -->
        <image id="of" src="./../images/sss.png"
            style="width: 20px;height: 20px;position: absolute;top:10px;left: 95%;font-size: 25px;" />
        <div class="innerbodywrapper" style="margin-bottom: 10px">

            <b style="line-height: 40px; font-size: 18px;">发送office邀请</b>

            <div class="form-item">

                <div id="tag" class="form-tab-wrap">

                    <div class="text_interview">

                        <span>入职职位: </span>

                        <input type="text" id="induction_jobsOffice" disabled />
                        <input type="text" id="induction_id" style="display: none;">
                    </div>

                    <div class="text_interview">

                        <span>入职时间: </span>

                        <input type="datetime-local" id="induction_jobtoptime" />

                    </div>

                    <div class="text_interview">

                        <span>入职地点: </span>

                        <input type="text" id="induction_site" disabled />

                    </div>

                    <div class="text_interview">

                        <span>联系人: </span>

                        <input type="text" id="induction_linkman" disabled />

                    </div>

                    <div class="text_interview">

                        <span>联系电话: </span>

                        <input type="text" id="induction_telephone_in" disabled />

                    </div>

                </div>

            </div>

        </div>

        <div class="form-item tc" style="text-align: center;">

            <input type="submit" name="" value="发送" onclick="sending()" class="form-submit-primary" />

        </div>

    </div>
    <div id="particulars">

        <image id="ofin" src="./../images/sss.png"
            style="width: 20px;height: 20px;position: absolute;top:10px;left: 95%;font-size: 25px;" />
        <div class="innerbodywrapper" style="margin-bottom: 10px">

            <b style="line-height: 40px; font-size: 18px;">发送offer邀请</b>

            <div class="form-item">
                <div style="width: 100%;display: flex;justify-content: center;">
                    <div class="particulars_box">
                        <div class="particulars_img">
                            <image style="width: 100px;height: 100px;border-radius: 50%;margin-bottom: 20px;"
                                class="particulars_logo" src="../images/20200612144226.jpg" />
                            <span class="particulars_logo_name">清远兄弟人才科技公司</span>
                        </div>
                        <div class="particulars_text">
                            <div style="font-size: 14px;">
                                <span>尊敬的</span><span class="particulars_name">xxx</span>
                            </div>
                            <div class="particulars_pc">
                                <text class="" selectable="false" space="false" decode="false">非常荣幸地通知您,您已被我司正式录用,<span class="particulars_josb">xxxx</span> 一职。真诚欢迎您的加入,祝您在我司工作愉快! 入职地点: <span
                                        class="particulars_address" style="color: #62d5c8;padding: 0 10px;"></span>
                                </text>
                            </div>
                            <div class="particulars_company">
                                <span class="company_name">清远兄弟人才科技公司</span>
                                <span class="the_time">2020.06.11</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>

    </div>
</body>

<script>

    var id

    var fromuid

    var websocket

    var resume_id

    var arr

    var dataLIst

    var phoneIndex

    var wxIndex

    var token_type = localStorage.getItem("token_type");

    var access_token = localStorage.getItem("access_token");

    $(function () {
   

        //get传输

        function getUrlParam(name) {
   

            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");

            var r = window.location.search.substr(1).match(reg);

            if (r != null) return decodeURI(r[2]);

            return null;

        }

        fromuid = localStorage.getItem("uid")

        utype = localStorage.getItem("utype")

        //console.log(fromuid);

        id = getUrlParam('id');

        resume_id = getUrlParam('resume_uid');

        //console.log(resume_id);



        websocket = new WebSocket("后台接口");//长链接接口,有新消息会自动获取
			


        if (utype == 2) {
   

            alert('当前身份是个人身份,请切换企业身份')

            window.opener = null;

            window.open('', '_self');

            window.close();

        }

        //连接关闭的回调方法

        websocket.onopen = function () {
   



            sendSocketMessage('登陆', 'login')

        }

        // //连接关闭的回调方法

        // websocket.onclose = function () {
   

        //     setMessageInnerHTML("WebSocket连接关闭");

        // }

        setMessageInnerHTML()

        //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。

        window.onbeforeunload = function () {
   

            closeWebSocket();

        }

        //关闭WebSocket连接

        function closeWebSocket() {
   

            websocket.close();

        }

        liebiao()

        getData()

        Chatlist()

        positionList()

        AccesswxNumber()

        if (dataLIst.length != 0) {
   

            $(".center").animate({
    scrollTop: $(".msgleft_ul li:last").offset().top }, 1000);

        }

        if (token_type == 'Bearer') {
   



        } else {
   

            alert('请先登陆')

            window.opener = null;

            window.open('', '_self');

            window.close();

        }

        // }

        if (fromuid == id) {
   

            alert('请不要和自己聊天')

            window.opener = null;

            window.open('', '_self');

            window.close();

        }

        if (dataLIst.length != 0) {
   

            //console.log("聊过了")

        } else {
   

            setTimeout(function () {
   

                text_in()

            }, 1000)

        }

        AccessPhone()

    })

    $("textarea").each(function (index) {
   
        $("textarea")[index].addEventListener('keydown', function (e) {
   
            if (e.keyCode != 13) {
   
                return;
            } else {
   //当按键输入为回车时,执行下列操作
                myFunction()
                event.preventDefault();//为了兼容IE8
                e.returnValue = false;
                e = $(this).val() + '\n';//手动增加换行符
                $(this).val(e).focus();//定义焦点还是在这个控件上
            }
        });
    });

    //常用语

    function setLongTerm() {
   

        var val = $('.biaoshi').val()

        if (val == 1) {
   

            $('.long_term').attr('id', 'show')

            $('.biaoshi').val('2')

            $(".long_term").empty();

            $('#function_img').attr('src', '../images/lchang.png')

            arr = [

                '很高兴收到您的应聘消息,可以聊聊吗?',

                '我可以看看您的简历吗?',

                '您之前是否有与我们这个职位相关的工作经验呢?',

                '可以说说您的期望薪资吗?您很符合我们的要求',

                '我们公司目前正在快速发展,前景非常不错'

            ]

            for (const key in arr) {
   

                html = ''

                html += '<span οnclick="setTerm(' + key + ')">' + arr[key] + '</span><br/>'

                $('.long_term')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值