简介
WebSocket是HTML5一种新的协议。顾名思义,它在服务器和浏览器之间建立了全双工通信。

需求背景
区块链测试系统web前端平台需要动态接收后端发送的状态信息改变一次测试session过程的状态显示,测试用例在运行后会返回一次运行的session,后端根据该session实时返回测试状态。

思路过程:
1.找到go语言websocket官方文档github官方地址https://github.com/gorilla/websocket
2.git clone代码,运行官方用例教程server
3.前端使用h5的websocket服务访问server
4.根据项目需求封装接口

bug踩坑:
1.can't load package: package server: build constraints exclude all Go files in /home/zeng/go-websocket/src/server
去掉  // +build ignore 即可

2.Firefox 无法建立到 ws://localhost:8080/echo 服务器的连接。
server配置跨域访问
var upgrader = websocket.Upgrader{
    // 解决跨域问题
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

前端主要代码:
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
<h1>WebSocket</h1>
<script>
    var websocket  = new WebSocket("ws://localhost:8080/echo");
    websocket.onopen = function () {
        session = "abcd"
        websocket.send(session);
        console.log(websocket.readyState)
    }
    websocket.onmessage = function (event) {
        console.log(event.data);
        websocket.close()
    }
    websocket.onclose = function() {
        alert("连接已关闭...");
    };
</script>
</body>
</html>

后端主要代码:
package main

import (
    "SocketService"
    "encoding/json"
    "fmt"
    "time"
)

type Test struct {
    Id   string
    Data string
}

func main() {
    url := "localhost:8080"
    SocketService.Init(url)
    time.Sleep(time.Second * 10)
    err := SocketService.SendMessage("abc", []byte("zeng"))
    if err != nil {
        fmt.Println("1:", err)
    }
    t := Test{"Id", "Data"}
    d, _ := json.Marshal(t)
    session := "abcd"
    SocketService.SendMessage(session, d)

if err != nil {
        fmt.Println("2:", err)
    }
    time.Sleep(time.Second * 1000)

}

参考博客:
https://blog.csdn.net/imliutao2/article/details/80838975
https://blog.csdn.net/wang_gongzi/article/details/82860427

demo传送门:https://github.com/umbrellahusky/gowebsocket

邮箱:2919033008@qq.com
qq:2919033008

浏览器与go语言的websocket通信的更多相关文章

  1. js判断是否安装某个android app,没有安装下载该应用(websocket通信,监听窗口失去焦点事件)

    现在经常有写场景需要提示用户下载app, 但是如果用户已经安装,我们希望是直接打开app. 实际上,js是没有判断app是否已经安装的方法的,我们只能曲线救国. 首先,我们需要有call起app的sc ...

  2. Springboot集成WebSocket通信全部代码,即扣即用。

    websocket通信主要来自两个类以及一个测试的html页面. MyHandler 和 WebSocketH5Config,下面全部代码 MyHandler类全部代码: package com.un ...

  3. 用C语言实现websocket服务器

    Websocket Echo Server Demo 背景 嵌入式设备的应用开发大都依靠C语言来完成,我去研究如何用c语言实现websocket服务器也是为了在嵌入式设备中实现一个ip camera的 ...

  4. 【Java Web开发学习】Spring MVC整合WebSocket通信

    Spring MVC整合WebSocket通信 目录 ========================================================================= ...

  5. websocket通信1009错误,

    问题说明: springboot继承 WebSocketConfigurer实现websocket通信服务,服务器端报错,"The decoded text message was too ...

  6. Python3+WebSockets实现WebSocket通信

    一.说明 1.1 背景说明 前段时间同事说云平台通信使用了个websocket的东西,今天抽空来看一下具体是怎么个通信过程. 从形式上看,websocket是一个应用层协议,socket是数据链路层. ...

  7. webSocket通信

    针对webSocket通信总结: 1.webSocket通信原理图: 2.webSocket通信实例 参考地址1:https://www.cnblogs.com/cjm123/p/9674506.ht ...

  8. HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端

    HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端 发表时间:2020-03-05 1 ...

  9. 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_202 "表达欲"是人类成长史上的强大"源动力",恩格斯早就直截了当地指出,处在蒙昧时代即低 ...

随机推荐

  1. Mysql使用binlog恢复数据解决误操作问题的两种方法

    为保证没有其他参数配置影响,重新安装配置了一台最小化安装的CentOS7虚拟机 1. 基础知识
 安装mysql5.6数据库Mysql binlog初步理解 2. 配置mysql 开启binlog.修 ...

  2. Mitigate XSS attacks

    JavaScriptEncode //使用“\”对特殊字符进行转义,除数字字母之外,小于127使用16进制“\xHH”的方式进行编码,大于用unicode(非常严格模式). var JavaScrip ...

  3. 理解http请求

    HTTP请求的GET方法可以用来抓取网页. HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则,计算机专家设计出HTTP,使HTTP客户(如Web浏览 ...

  4. MATLAB 正则表达式(一)(转)

    http://blog.sina.com.cn/s/blog_53f29119010009uf.html 正则表达式这个词上大学的时候就听同寝室的一个家伙常念叨——那家伙当然很厉害啦,现在已经发洋财去 ...

  5. Maven实战(十一)eclipse下载依赖jar包出问题

    问题描述 在pom.xml中配置了依赖,但是提示依赖不成功,或在本地仓库找不到相关依赖 大致错误如下: ArtifactDescriptorException: Failed to read arti ...

  6. objc_msgSend函数的实现

    毕竟汇编语言代码比较晦涩难懂,因此这里将函数的实现反汇编成C语言的伪代码: //下面的结构体中只列出objc_msgSend函数内部访问用到的那些数据结构和成员. /* 其实SEL类型就是一个字符串指 ...

  7. Kubernetes-dns 服务搭建

    DNS 服务不是独立的系统服务,而是一种 addon ,作为插件来安装的,不是 kubernetes 集群必须的(但是非常推荐安装).可以把它看做运行在集群上的应用,只不过这个应用比较特殊而已. DN ...

  8. 基础拾遗 C# Json 与对象相互转换

    方法一.JavaScriptSerializer 方法二.JsonConvert 示例: Web API项目 1.新建 Model: namespace WebApi{ public class Pr ...

  9. DevOps 解读

    本文为 转载文章, 非原创 DevOps DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化.运 ...

  10. 关于onscroll函数兼容各浏览器的方法分析

    关于window.onscroll函数兼容各浏览器的方法分析 1.当前文档的渲染模式是决定onscroll函数兼容性根本原因 目前浏览器的排版引擎有三种模式:怪异模式(Quirks mode).接近标 ...