Golang语言社区--wesocket的demo(包括H5前端,GO后端)
时间:2022-05-06
本文章向大家介绍Golang语言社区--wesocket的demo(包括H5前端,GO后端),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
go代码:
package main
import (
"flag"
"fmt"
"glog-master"
"net/http"
"code.google.com/p/go.net/websocket"
)
// 初始化函数
func init() {
fmt.Println("Entry init")
// 连接池的 初始化; 数据结构的初始化;
PlayerBuShu = make(map[string]int)
H5_Data = make(map[string]*OnlineUser)
flag_h5 = 0
flag.Set("alsologtostderr", "true") // 日志写入文件的同时,输出到stderr
flag.Set("log_dir", "./tmp") // 日志文件保存目录
flag.Set("v", "3") // 配置V输出的等级。
flag.Parse()
return
}
// 主函数
func main() {
glog.Info("main")
fmt.Println("Entry main")
http.Handle("/Golangweb", websocket.Handler(BuildConnection))
if err := http.ListenAndServe(":7821", nil); err != nil {
fmt.Println("main err:", err.Error())
return
}
return
}
func BuildConnection(ws *websocket.Conn) {
data := ws.Request().URL.Query().Get("data")
if data == "" {
fmt.Println("data is nil!!!")
//return
}
// 接受到的 客户端的数据
fmt.Println("data:", data)
// 处理-- 用户的登陆 用户的基础行为(走路 , 开枪 ,死亡 等等)
onlineUser := &OnlineUser{
Connection: ws,
}
onlineUser.PullFromClient()
}
func (this *OnlineUser) PullFromClient() {
fmt.Println("PullFromClient")
for {
var content string
if err := websocket.Message.Receive(this.Connection, &content); err != nil {
break
}
if len(content) == 0 {
break
}
glog.Info("data:", content)
}
}
H5代码:
<!DOCTYPE html>
<meta charset="utf-8" />
<title>Golang 语言社区 (www.Golang.Ltd)</title>
<body>
<h3 style="color: cornflowerblue;">Golang 语言社区 </h3> 用户名: <input type='text' id='name' value="yulegame">
<input type="submit" onclick="login()" />
</body>
<script language="javascript" type="text/javascript">
var wsUri = "ws://127.0.0.1:7821/Golangweb?data={'Protocol':3,'Protocol2':1,'OpenID'='ww'}";
var goServerJson;
var json;
function login() {
var test;
test = document.getElementById("name").value
alert(test);
var json = {
Protocol: 1,
Protocol2: 3,
};
var goServerJson = JSON.stringify(json);
wsUri = wsUri;
console.log(wsUri);
doSend(goServerJson);
}
//////////////////////////////////////////////////////////////////
var output;
var websocket1;
function init() {
output = document.getElementById("output");
testWebSocket();
}
function testWebSocket() {
console.log(wsUri)
websocket1 = new WebSocket(wsUri);
websocket1.onopen = function(evt) {
onOpen(evt)
};
websocket1.onclose = function(evt) {
onClose(evt)
};
websocket1.onmessage = function(evt) {
onMessage(evt)
};
websocket1.onerror = function(evt) {
onError(evt)
};
}
function onOpen(evt) {
writeToScreen("CONNECTED");
}
function onClose(evt) {
writeToScreen("DISCONNECTED");
}
function onMessage(evt) {
var data = evt.data;
console.log("data=" + data);
var d = base64decode(data);
var zhuana = utf8to16(d);
writeToScreen('<span style="color: blue;">RESPONSE: ' + zhuana + '</span>');
}
function onError(evt) {
writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
}
function doSend(message) {
writeToScreen("SENT: " + message);
writeToScreen('<span style="color: blue;">RESPONSE: ' + base64encode(message) + '</span>');
websocket1.send(message);
}
function writeToScreen(message) {
var pre = document.createElement("p");
pre.style.wordWrap = "break-word";
pre.innerHTML = message;
output.appendChild(pre);
}
window.addEventListener("load", init, false);
</script>
<script src="js/luanma.js"></script>
<div id="output"></div>
服务器日志截图:
代码下载链接:http://www.golang.ltd/forum.php?mod=viewthread&tid=5992
- R语言学习 - 非参数法生存分析
- 初学File类
- R语言学习 - 图形设置中英字体
- 递归思想解决输出目录下的全部文件
- Linux学习 - 又双叒叕一个软件安装方法
- 在Python中实现你自己的推荐系统
- 在Java中如何实现“Pless presss any key to continue.”
- 震惊小伙伴的Python单行代码
- 如何打造一款可靠的WAF(Web应用防火墙)
- 为啥我的Python这么慢 (一)
- 矩阵的基本知识构造重复矩阵的方法——repmat(xxx,xxx,xxx)构造器的构造方法单位数组的构造方法指定公差的等差数列指定项数的等差数列指定项数的lg等差数列sub2ind()从矩阵索引==》
- 简单的Writer和ReaderWriter的主要方法Writer工作原理Reader的主要方法readLine():String
- 为啥我的Python这么慢 - 项查找 (二)
- 初识字节流+实现缓冲字节流OutputStream的主要方法构造方法读关流实现BufferedInputStream实现BufferedOutputStream为什么read()返回的是Int型而不是
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 激发态计算中的溶剂效应
- 不会吧,有人用了两年Spring, 居然不知道包扫描是怎么实现的
- 不会吧!都 0202 年了,不会还有不知道 axios 的吧
- 全栈的自我修养: 002使用@vue/cli进行vue环境搭建 (使用Vue,SpringBoot,Flask完成前后端分离)
- JAVA | Java 解决跨域问题 花式解决跨域问题
- 深入理解Java泛型(二)通配符与嵌套
- 用高斯计算磷光发射能
- Android So动态加载 优雅实现与原理分析
- 堆与栈区别
- 在Gaussian16中同时扫描两个反应坐标
- python调试神器traceback
- Centos安装高版本GCC
- Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
- Spring 注入集合的成员变量属性
- 深入理解JVM(③)Java的锁优化