zoukankan      html  css  js  c++  java
  • js作为websocket client,服务用java 点对点、一对多聊天

    js作为websocket client,服务用java 点对点、一对多聊天

    • 今天就分享前端的websokcet处理
      websocket处理就是一个客服端和服务端之间的长连接
    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8" />
        <title>聊天室</title>
        <style>
            #message {
                margin-top: 20px;
                border: 1px solid gray;
                padding: 20px;
            }
        </style>
    
    </head>
    
    <body>
    
        昵称:<input type="text" id="nickname" />
        <!-- <button onclick="conectWebSocket()">连接WebSocket</button> -->
        <button onclick="initws()">连接WebSocket</button>
        <button onclick="closeWebSocket()">断开连接</button>
    
        <br /> 消息:
        <input id="text" type="text" /> 频道号
        <input id="toUser" type="text" />
        <button onclick="send()">发送消息</button>
    
        <!-- 存放接收到的消息. -->
        <div id="message">
    
        </div>
    
    
        <script type="text/javascript">
            //连接对象.
            var websocke = null;
            var nickname = null;
            var uid = null;
    
            function conectWebSocket() {
                nickname = document.getElementById("nickname").value;
                if (nickname == '') {
                    alert("请输入昵称");
                    return;
                }
                //判断当前的浏览器是否支持websocket.
                if ("WebSocket" in window) {
                    uid = "sdaaaaaaaaaaaaaaaaaaaaaaaaa";
                    websocket = new WebSocket("ws://localhost:8080/websocket/" + nickname + "/" + uid);
                } else {
                    alert("Not support websocket");
                    return false;
                }
                //连接成功的方法.
                websocket.onopen = function(event) {
                    setMessgeHtml("Loc MSG:已连接");
                }
    
                //连接关闭.
                websocket.onclose = function(event) {
                    // aler
                    setMessgeHtml("Loc MSG:连接关闭");
                }
    
                //连接异常.
                websocket.onerror = function(event) {
                    setMessgeHtml("Loc MSG:连接异常");
                }
    
    
                websocket.onmessage = function(event) {
                    console.log("fallback :", event);
                    setMessgeHtml(event.data);
                }
    
            } //conectWebSocket
    
    
            var single = (function() {
                return {
                    getInstance: function() {
                        if (websocke != null && websocke.readyState == 1) {
                            console.log("wlx-------------------" + websocke.readyState)
                            setMessgeHtml("Loc MSG:不能重复连接!");
                            return websocke
                        } else {
                            websocket = null
                            nickname = document.getElementById("nickname").value;
                            if (nickname == '') {
                                alert("请输入昵称");
                                return;
                            }
                            //判断当前的浏览器是否支持websocket.
                            if ("WebSocket" in window) {
                                uid = "sdaaaaaaaaaaaaaaaaaaaaaaaaa";
                                websocket = new WebSocket("ws://localhost:8080/websocket/" + nickname + "/" + uid);
                            } else {
                                alert("Not support websocket");
                                return false;
                            }
                            //连接成功的方法.
                            websocket.onopen = function(event) {
                                setMessgeHtml("Loc MSG:已连接");
                            }
    
                            //连接关闭.
                            websocket.onclose = function(event) {
                                // aler
                                setMessgeHtml("Loc MSG:连接关闭");
                            }
    
                            //连接异常.
                            websocket.onerror = function(event) {
                                setMessgeHtml("Loc MSG:连接异常");
                            }
    
    
                            websocket.onmessage = function(event) {
                                console.log("fallback :", event);
                                setMessgeHtml(event.data);
                            }
                            return websocket;
                        } //conectWebSocket
                    }
                }
            })();
    
            function initws() {
                websocke = single.getInstance()
            }
    
    
    
            function setMessgeHtml(msg) {
                var message = document.getElementById("message");
                message.innerHTML += msg + "<br/>";
            }
    
            function closeWebSocket() {
                websocke.close();
            }
            /**
            	发送消息.
            */
            function send() {
                var message = document.getElementById("text").value;
                var toUser = document.getElementById("toUser").value;
                var socketMsg = {
                    msg: message,
                    toUser: toUser
                };
                if (toUser == '') {
                    socketMsg.type = 0; //群聊.
                } else {
                    socketMsg.type = 1; //单聊.
                }
                console.log("发送的是:", socketMsg);
                console.log("连接状态:", websocke.readyState);
                //websocket.send(nickname+":"+message);
                websocke.send(JSON.stringify(socketMsg)); //将json对象转换为json字符串.
            }
        </script>
    </body>
    
    </html>
    

    websocket 要使用js单例模式,避免点击一个连接的在发送消息的时候会收到两个一样的文件

    ps: 服务端代码有需求未完善,稍后分享

    转载请说明出处:https://www.cnblogs.com/ontoweb-zp/p/9721084.html

  • 相关阅读:
    51nod 1428 活动安排问题
    COGS 1. 加法问题 (水体日常)
    COGS 1406. 邻居年龄排序[Age Sort,UVa 11462](水题日常)
    51nod 1133 不重叠的线段
    51nod 1031 骨牌覆盖
    51nod 1050 循环数组最大子段和
    51nod 1094 和为k的连续区间
    51nod 1433 0和5
    51nod 1092 回文字符串
    洛谷 P1507 NASA的食物计划
  • 原文地址:https://www.cnblogs.com/ontoweb-zp/p/9721084.html
Copyright © 2011-2022 走看看