go语言使用websocket

news/2024/10/22 4:26:28/

go后端代码

安装模块

go get "github.com/gorilla/websocket"

main.go代码如下:

package mainimport ("fmt""github.com/gorilla/websocket""net/http"
)var upgrader = websocket.Upgrader{CheckOrigin: func(r *http.Request) bool {// 允许所有来源的WebSocket连接return true},
}func main() {http.HandleFunc("/ws", wsHandle)err := http.ListenAndServe(":9009", nil)if err != nil {fmt.Println(err)}
}func wsHandle(w http.ResponseWriter, r *http.Request) {// 升级为wsconn, err := upgrader.Upgrade(w, r, nil)if err != nil {fmt.Println(err)return}defer conn.Close()fmt.Println("连接建立成功")// 循环监听客户端传来的消息for {// 读取客户端消息messageType, p, err := conn.ReadMessage()if err != nil {fmt.Println(err)return}// 处理消息fmt.Println("接收到客户端的消息为: ", string(p))// 发送消息给客户端err = conn.WriteMessage(messageType, p)//err = conn.WriteMessage(messageType, []byte("我是服务器返回的消息"))if err != nil {fmt.Println(err)return}}
}

运行项目(右键运行)

项目运行地址为: ws://127.0.0.1:9009/ws

前端测试demo页面代码如下

也可以使用这个网站测试webSocket代码:http://www.websocket-test.com/

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebSocket 连接测试</title>
<style>#log {margin-top: 20px;border: 1px solid #ccc;padding: 10px;height: 500px;overflow-y: scroll;}
</style>
</head>
<body><h2>WebSocket 连接测试页面</h2><button id="connect">连接</button>
<input type="text" autocomplete="off" id="address" value="ws://127.0.0.1:9009/ws" placeholder="输入webSocket地址...">
<button id="disconnect" disabled>断开连接</button>
<button id="send" disabled>发送消息</button><input type="text" autocomplete="off" id="message" placeholder="输入消息...">
<div id="log"></div><script>var ws;var log = document.getElementById('log');function logMessage(message) {var p = document.createElement('p');p.textContent = message;log.appendChild(p);// 确保日志始终显示在底部log.scrollTop = log.scrollHeight;}document.getElementById('connect').addEventListener('click', function() {if ('WebSocket' in window) {ws = new WebSocket(document.getElementById('address').value);ws.onopen = function() {logMessage('已连接到WebSocket服务器。');document.getElementById('connect').disabled = true;document.getElementById('disconnect').disabled = false;document.getElementById('send').disabled = false;};ws.onmessage = function(event) {logMessage('接收到消息:' + event.data);};ws.onclose = function(event) {if (event.wasClean) {logMessage('连接已干净地关闭。');} else {logMessage('连接已断开。');}logMessage('代码:' + event.code + ', 原因:' + event.reason);document.getElementById('connect').disabled = false;document.getElementById('disconnect').disabled = true;document.getElementById('send').disabled = true;};ws.onerror = function(error) {logMessage('WebSocket错误:' + JSON.stringify(error));};} else {// 浏览器不支持WebSocketlogMessage('你的浏览器不支持WebSocket。');}});document.getElementById('disconnect').addEventListener('click', function() {ws.close();});document.getElementById('send').addEventListener('click', function() {var message = document.getElementById('message').value;ws.send(message);logMessage('发送消息:' + message);});
</script></body>
</html>

http://www.ppmy.cn/news/1540971.html

相关文章

横板营业执照提取生成

前言 有一段时间没发博客了&#xff0c;今天分享下几个月前做的营业执照提取器UI 预览图 框架 b-ui很好用&#xff0c;这个前端框架作者 发布的插件我都会用&#xff0c;鱿鱼助手也是基于这个框架开发的 代码 html <template><view><template><view…

Lua 语言中的注释详解

软考鸭微信小程序 过软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 引言 在编程中&#xff0c;注释是代码的重要组成部分&#xff0c;它帮助开发者理解和维护代码。Lua&#xff0c;作为一种轻量级的脚本语言&#xff0c;也提…

laravel-admin后台子账号菜单配置详解

最近在使用laravel-admin做后台开发&#xff0c;在使用到子账号菜单配置时遇到问题。通过和大牛沟通再加上自己一番摸索&#xff0c;终于探索出门道&#xff0c;在此记录备用。 走&#xff0c;上干货&#xff01; 登录admin账号做如下操作&#xff1a; 1、添加操作权限(Perm…

fastadmin框架素材一键迁移脚本

<?php // 需要迁移的数据库 $hostname 127.0.0.1; $database fastadmin; $username fastadmin; $password fastadmin; $hostport 3306; $prefix fa_;// 之前能访问的素材域名 $domain https://fastadmin.xxxx.com;// 连接数据库 $conn new mysqli($hostname, $user…

Qt与下位机通信时,如何等待下位机回复和超时处理

在C或Qt中实现与下位机&#xff08;例如嵌入式设备、传感器等&#xff09;的通信&#xff0c;并且需要等待对方回复&#xff0c;如果几秒后没有收到回复则执行下一步动作&#xff0c;可以使用多种方法来实现这种超时机制。以下是几种常见的实现方式&#xff1a; 1. 使用 QTime…

机器人大功率主轴SycoTec 4060 ER-S汽车电机机芯焊缝铣削打磨加工

在汽车制造的精密领域&#xff0c;每一个细节都关乎着整车的性能与品质&#xff0c;而汽车电机机芯的焊缝加工更是其中至关重要的一环。在机器人末端加装德国进口电主轴 SycoTec 4060 ER-S&#xff0c;为汽车电机机芯焊缝铣削打磨加工带来全新的解决方案。 SycoTec 4060 ER-S转…

HarmonyOS中ArkUi框架中常用的装饰器

目录 1.装饰器 1&#xff09;Component 1--装饰内容 2&#xff09;Entry 1--装饰内容 2--使用说明 3&#xff09;Preview 1--装饰内容 2--使用说明 4&#xff09;CustomDialog 1--装饰内容 2--使用说明 5&#xff09;Observed 1--装饰内容 2--使用说明 6&#xff09;ObjectLin…

写了十几年程序,今天才第一天知道什么是屎山代码

可以说&#xff0c;我确实没在工作中用过Javascript&#xff0c;因为我从未见过如此“厚颜无耻”的代码 我曾经也是学过2~3年&#xff0c;还是JQuery的年代&#xff0c;但应该确实没在实战中用过&#xff0c;否则我怎么会不记得写过这些屎山代码的&#xff1f;&#xff1f;&…