简介
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. 一种特殊场景下的HASH JOIN的优化为NEST LOOP.

    应用场景: 有如下的SQL: select t.*, t1.ownerfrom t, t1where t.id=t1.id; 表t ,t1的数据量比较大,比如200W行.但是两张表能关联的行数却很少, ...

  2. Oracle诊断工具 - ORA-2730x Troubleshooting Tool

    通常情况下,ORA-27300 ORA-27301 ORA-27302错误的原因是操作系统的系统调用错误或者操作系统配置问题,错误格式:ORA-27300: OS system dependent o ...

  3. 用UIControl封装Button

    用UIControl封装Button 效果 说明 UIControl在处理超出触摸范围的触摸事件时有bug 源码 基础类 // // BaseControl.h // BaseControl // / ...

  4. Python入门-模块2(random模块、os模块)

    >>> random.randomrange(1,10) #返回1-10之间的一个随机数,不包括10 >>> random.randint(1,10) #返回1-1 ...

  5. 设置邮箱发送服务|邮箱开始SMTP服务和腾讯云解封25端口的经验总结

    原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=7dfaaf63-d36f- ...

  6. 【Pygame】 简易五子棋

    import pygame import sys import time import random pygame.init() screen_size = (800,560) WIDTH = 720 ...

  7. windows命令行大全

    命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一 ...

  8. 网络编程--Socket(套接字)

    网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在 ...

  9. Spark系列-初体验(数据准备篇)

    Spark系列-初体验(数据准备篇) Spark系列-核心概念 在Spark体验开始前需要准备环境和数据,环境的准备可以自己按照Spark官方文档安装.笔者选择使用CDH集群安装,可以参考笔者之前的文 ...

  10. 第二章 Google guava cache源码解析1--构建缓存器

    1.guava cache 当下最常用最简单的本地缓存 线程安全的本地缓存 类似于ConcurrentHashMap(或者说成就是一个ConcurrentHashMap,只是在其上多添加了一些功能) ...