浏览器与go语言的websocket通信
简介
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通信的更多相关文章
- js判断是否安装某个android app,没有安装下载该应用(websocket通信,监听窗口失去焦点事件)
现在经常有写场景需要提示用户下载app, 但是如果用户已经安装,我们希望是直接打开app. 实际上,js是没有判断app是否已经安装的方法的,我们只能曲线救国. 首先,我们需要有call起app的sc ...
- Springboot集成WebSocket通信全部代码,即扣即用。
websocket通信主要来自两个类以及一个测试的html页面. MyHandler 和 WebSocketH5Config,下面全部代码 MyHandler类全部代码: package com.un ...
- 用C语言实现websocket服务器
Websocket Echo Server Demo 背景 嵌入式设备的应用开发大都依靠C语言来完成,我去研究如何用c语言实现websocket服务器也是为了在嵌入式设备中实现一个ip camera的 ...
- 【Java Web开发学习】Spring MVC整合WebSocket通信
Spring MVC整合WebSocket通信 目录 ========================================================================= ...
- websocket通信1009错误,
问题说明: springboot继承 WebSocketConfigurer实现websocket通信服务,服务器端报错,"The decoded text message was too ...
- Python3+WebSockets实现WebSocket通信
一.说明 1.1 背景说明 前段时间同事说云平台通信使用了个websocket的东西,今天抽空来看一下具体是怎么个通信过程. 从形式上看,websocket是一个应用层协议,socket是数据链路层. ...
- webSocket通信
针对webSocket通信总结: 1.webSocket通信原理图: 2.webSocket通信实例 参考地址1:https://www.cnblogs.com/cjm123/p/9674506.ht ...
- HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端
HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端 发表时间:2020-03-05 1 ...
- 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_202 "表达欲"是人类成长史上的强大"源动力",恩格斯早就直截了当地指出,处在蒙昧时代即低 ...
随机推荐
- 删除maven本地库中下载不完全的jar包
@echo off rem 这里写你的仓库路径 set REPOSITORY_PATH= '本地仓库路径' rem 正在搜索... for /f "delims=" %%i in ...
- Android组件系列----Activity的生命周期
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- mvc5中重命名项目的名称后,出现"找到多个与名为“Home”的控制器匹配的类型"
1.已把项目中所有的Webapplication1改为了MvcMovie,但是运行后,还是报错: 找到多个与名为“Home”的控制器匹配的类型 2.已重新生成解决方安,还是不行. 解决方法:把bin文 ...
- python基础_类型_dict
#dict字典,其实与其叫字典不如叫key-value更合适,不知道这个名是怎么来的,这个可以用来搞用户名和密码,不过搞这个不用数据库是不是显得太low了 #用花括号{}扩起来,逗号分隔每个元素,每个 ...
- [C++] 用Xcode来写C++程序[6] Name visibility
用Xcode来写C++程序[6] Name visibility 此小结包括了命名空间的一些使用细节 命名空间 #include <iostream> using namespace st ...
- Python常见报错问题(不定时更新)
1.TabError: inconsistent use of tabs and spaces in indentation 在缩进中不一致地使用tab键和空格键. 报错原因:混用了tab和space ...
- spring-boot-jpa 自定义查询工具类
1.pom文件中添加如下配置 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- UI(一)
1.AfxWinMain 首先,MFC程序先执行到TheApp实例化对象也就是通过这句CTestApp the App来实例化对象的然后,调用CTestApp构造函数分配内存空间 然后,就调用了Afx ...
- 阿里八八Alapa事后诸葛亮
设想和目标 1.我们的软件要解决什么问题?是否定义的很清楚?是否对典型用户和典型场景有清晰的描述? 我们的项目希望解决用户对于时间.日程管理上不够方便.直观.易丢失的问题,因为并不是新颖高端的概念,因 ...
- 初识android界面布局
1.活动 活动是android开发中最基本的概念,也是最容易吸引用户的地方,是一种可以包含用户界面的组件. Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节.具体如下: (1)o ...