首页前端开发HTMLhtml5使用go+websocket搭建websocket服务的实例

html5使用go+websocket搭建websocket服务的实例

时间2024-01-23 01:09:04发布访客分类HTML浏览507
导读:收集整理的这篇文章主要介绍了html5使用go+websocket搭建websocket服务的实例,觉得挺不错的,现在分享给大家,也给大家做个参考。这次的就直接发放代码截图吧,应该是用go语言做后台一个简易的聊天,这里没用到什么特别的知识,...
收集整理的这篇文章主要介绍了html5使用go+websocket搭建websocket服务的实例,觉得挺不错的,现在分享给大家,也给大家做个参考。

这次的就直接发放代码截图吧,应该是用go语言做后台一个简易的聊天,这里没用到什么特别的知识,最朴实的来实现效果,主要目的是分享下h5怎么用websocket,go搭建websocket服务的主要部分。

go代码部分:

// WebChat PRoject main.gopackage mainimport (    "fmt"    "net/http"    "time"    "encoding/json"    "strings"    "golang.org/x/net/websocket")//全局信息VAR datas Datasvar users map[*websocket.Conn]stringfunc main() {
    fmt.Println("启动时间")    fmt.Println(time.Now())    //初始化    datas = Datas{
}
    users = make(map[*websocket.Conn]string)    //绑定效果页面    http.HandleFunc("/", h_index)    //绑定socket方法    http.Handle("/webSocket", websocket.Handler(h_webSocket))    //开始监听    http.ListenAndServe(":8", nil)}
func h_index(w http.ResponseWrITer, r *http.Request) {
    http.ServeFile(w, r, "index.htML")}
func h_webSocket(ws *websocket.Conn) {
    var userMsg UserMsg    var data string    for {
            //判断是否重复连接        if _, ok := users[ws];
 !ok {
            users[ws] = "匿名"        }
            userMsgsLen := len(datas.UserMsgs)        fmt.Println("UserMsgs", userMsgsLen, "users长度:", len(users))        //有消息时,全部分发送数据        if userMsgsLen >
 0 {
            b, errMarshl := json.Marshal(datas)            if errMarshl != nil {
                fmt.Println("全局消息内容异常...")                break            }
            for key, _ := range users {
                errMarshl = websocket.Message.Send(key, string(b))                if errMarshl != nil {
                    //移除出错的链接                    delete(users, key)                    fmt.Println("发送出错...")                    break                }
            }
            datas.UserMsgs = make([]UserMsg, 0)        }
            fmt.Println("开始解析数据...")        err := websocket.Message.Receive(ws, &
data)        fmt.Println("data:", data)        if err != nil {
            //移除出错的链接            delete(users, ws)            fmt.Println("接收出错...")            break        }
            data = strings.Replace(data, "\n", "", 0)        err = json.Unmarshal([]byte(data), &
userMsg)        if err != nil {
            fmt.Println("解析数据异常...")            break        }
        fmt.Println("请求数据类型:", userMsg.DataTyPE)        switch userMsg.DataType {
            case "send":            //赋值对应的昵称到ws            if _, ok := users[ws];
 ok {
                users[ws] = userMsg.UserName                //清除连接人昵称信息                datas.UserDatas = make([]UserData, 0)                //重新加载当前在线连接人                for _, item := range users {
                    userData := UserData{
UserName: item}
                    datas.UserDatas = append(datas.UserDatas, userData)                }
            }
            datas.UserMsgs = append(datas.UserMsgs, userMsg)        }
    }
}
type UserMsg struct {
    UserName string    Msg      string    DataType string}
type UserData struct {
    UserName string}
type Datas struct {
    UserMsgs  []UserMsg    UserDatas []UserData}
    

  html代码部分:

!DOCTYPE html>
    html>
    head>
        title>
    /title>
        meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
        !-- 新 Bootstrap 核心 CSS 文件 -->
        link rel="stylesheet" href="//cdn.bootcss.COM/bootstrap/3.3.5/css/bootstrap.min.css">
        script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js">
    /script>
        !--        script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js">
    /script>
    -->
    /head>
    body>
        div>
            div>
    内容:/div>
            div id="divShow">
                !--div class="list-group-item list-group-item-success">
    1111/div>
                div class="list-group-item list-group-item-info">
    1111/div>
                div class="list-group-item list-group-item-warning">
    1111/div>
                div class="list-group-item list-group-item-danger">
    1111/div>
    -->
            /div>
            div id="divUsers">
                在线:br />
                !--div class="BTn btn-default">
    111/div>
    -->
            /div>
            div>
                昵称:input id="txtUserName" value="红领巾" type="text" maxlength="20" style="width: 30%;
     margin-bottom: 15px" />
                聊聊:textarea id="txtContent" autofocus rows="6" placeholder="想聊的内容" maxlength="200" required style="width: 60%;
     ">
    /textarea>
                button class="btn btn-default" id="btnSend" style="margin-top:15px">
    发 送/button>
            /div>
        /div>
    /body>
    /html>
    script>
    var tool = function () {
            var paperLoopNum = 0;
            var paperTempleArr = [            'div class="list-group-item list-group-item-success">
{
0}
    /div>
    ',            'div class="list-group-item list-group-item-info">
{
0}
    /div>
    ',            'div class="list-group-item list-group-item-warning">
{
0}
    /div>
    ',            'div class="list-group-item list-group-item-danger">
{
0}
    /div>
    '        ];
        return {
            paperDiv: function (val) {
                    var hl = paperTempleArr[paperLoopNum];
                    paperLoopNum++;
                    if (paperLoopNum >
= paperTempleArr.length) {
     paperLoopNum = 0;
 }
                return this.formart(hl, [val])            }
,            formart: function (str, arrVal) {
                    for (var i = 0;
     i  arrVal.length;
 i++) {
                    str = str.replace("{
" + i + "}
    ", arrVal[i]);
                }
                    return str;
            }
        }
    }
    function showMsg(id, hl, isAppend) {
        if (!isAppend) {
     $("#" + id).html(hl);
 }
 else {
                $("#" + id).append(hl);
        }
    }
    $(function () {
            //初始化工具方法        var tl = new tool();
            var wsUrl = "ws://172.16.9.6:8/webSocket";
            ws = new WebSocket(wsUrl);
        try {
            ws.onopen = function () {
                    //showMsg("divShow", tl.paperDiv("连接服务器-成功"));
            }
            ws.onclose = function () {
                if (ws) {
                        ws.close();
                        ws = null;
                }
                    showMsg("divShow", tl.paperDiv("连接服务器-关闭"), true);
            }
            ws.onmessage = function (result) {
                    //console.LOG(result.data);
                    var data = JSON.parse(result.data);
                $(data.UserMsgs).each(function (i, item) {
                        showMsg("divShow", tl.paperDiv("【" + item.UserName + "】:" + item.Msg), true);
                }
    );
                    var userDataShow = [];
                $(data.UserDatas).each(function (i, item) {
                        userDataShow.push('div class="btn btn-default">
    ' + item.UserName + '/div>
    ');
                }
    );
                    showMsg("divUsers", userDataShow.join(''), false);
            }
            ws.onerror = function () {
                if (ws) {
                        ws.close();
                        ws = null;
                }
                    showMsg("divShow", tl.paperDiv("连接服务器-关闭"), true);
            }
        }
 catch (e) {
                alert(e.message);
        }
        $("#btnSend").on("click", function () {
                var tContentObj = $("#txtContent");
                var tContent = $.trim( tContentObj.val()).replace("/[\n]/g", "");
                var tUserName = $.trim( $("#txtUserName").val());
     tUserName = tUserName.length = 0 ? "匿名" : tUserName;
            if (tContent.length = 0 || $.trim(tContent).length = 0) {
     alert("请输入发送内容!");
     return;
 }
            if (ws == null) {
     alert("连接失败,请F5刷新页面!");
     return;
 }
            var request = tl.formart('{
"UserName": "{
0}
", "DataType": "{
1}
", "Msg": "{
2}
" }
    ',                                     [tUserName, "send", tContent]);
                ws.send(request);
                tContentObj.val("");
                tContentObj.val($.trim(tContentObj.val()).replace("/[\n]/g", ""));
        }
    );
        $("#txtContent").on("keydown", function (event) {
            if (event.keyCode == 13) {
                    $("#btnSend").trigger("click");
            }
        }
    );
    }
    )/script>
    

  效果图:

  

@H_512_14@

以上就是html5使用go+websocket搭建websocket服务的实例的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: html5中新特性之语义化标签的实例...下一篇:html5 canvas绘制爱心的方法示例猜你在找的html5相关文章 关于移动端h5开发相关内容总结2022-05-17html5教程-学表单的第二天2018-12-10html5教程-HTML5浏览器支持2018-12-10html5教程-HTML5智能表单2018-12-10html5教程-微信H5使用resLoader实现加载页效果2018-12-10html5教程-day01-初级-JS0-热身运动JS入门教程2018-12-10html5教程-html5shiv.js和respond.min.js2018-12-10html5教程-不同浏览器对于html5 audio标签和音频格式的兼容性2018-12-10html5教程-使用Html5实现手风琴案例2018-12-10html5教程-html5笔记2018-12-10 其他相关热搜词更多phpjavapython程序员load

若转载请注明出处: html5使用go+websocket搭建websocket服务的实例
本文地址: https://pptw.com/jishu/583606.html
Html5文件异步上传功能的实现 html5设置或返回音频/视频是否应该在结束时再次播放的属性loop

游客 回复需填写必要信息