当前位置: 首页 > wzjs >正文

为什么用html5做网站福建 网站建设

为什么用html5做网站,福建 网站建设,中铁建设集团门户员工登录,建筑考试网官网Go语言即时通讯系统开发日志day1,主要模拟实现的一个简单的发送消息和接受消息的小demo,因为也才刚学习go语言的语法,对go的json、net/http库了解不多,所以了解了一下go语言的encoding/json库和net/http库,以及websock…

Go语言即时通讯系统开发日志day1,主要模拟实现的一个简单的发送消息和接受消息的小demo,因为也才刚学习go语言的语法,对go的json、net/http库了解不多,所以了解了一下go语言的encoding/json库net/http库,以及websocket

总结:实现了极简的”聊天“demo,不能够支持不同用户的显示,无单聊,群聊,未使用MySQL保存数据,Redis作为缓存。希望明天可以完成数据库对数据存储,支持双人聊天,支持查看历史聊天记录。

学习方法反思不要好高骛远,只是完成了一个小demo,却在学习过程找了一些github上的高星IM来看,却实现不了,后续在完成聊天模块,联系人模块,群组模块等时可以在查看github的高星项目向其参考学习;不要追求完美,学习到一个知识点的时候,如json,http包,不要过多学习掌握即可,不用在浏览器中搜索过多页面进行查看,仅选择一俩个即可,最好可以写一篇简单的博客进行总结加深印象,使用ai也同样,使用一个或两个即可,不要过对比,浪费时间。

之前只是初略的了解了go语言支持json格式,但不了解作用是什么,以及json库的作用;所以我写了一个博客,Go语言:json 作用和语法,简单介绍了 json 的作用(指定字段名、忽略空值、忽略字段),encoding/json的两个常用函数Marshal序列化和Unmarshal反序列化。

定义消息类型

type Message struct {Sender    string `json:"sender"`Content   string `json:"content"`Timestamp int64  `json:"timestamp"`
}

构建服务器

func main() {// 初始化路由http.HandleFunc("/ws", handleConnections)// 添加静态文件服务,用于测试HTML客户端http.Handle("/", http.FileServer(http.Dir("./web")))// 启动服务器log.Println("Server started on :8080")err := http.ListenAndServe(":8080", nil)if err != nil {log.Fatal("ListenAndServe: ", err)}
}var upgrater = websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,
}// 客户端连接
type Client struct {conn *websocket.Connsend chan []byte
}func handleConnections(w http.ResponseWriter, r *http.Request) {// 升级 HTTP 为 WebSocketconn, err := upgrater.Upgrade(w, r, nil)if err != nil {log.Println(err)return}defer conn.Close()// 创建客户端client := &Client{conn: conn,send: make(chan []byte),}// 启动读写goroutinego client.writePump()client.readPump()
}
  • 每个客户端连接由一个Client对象表示

  • 每个连接使用两个 goroutine 处理读写操作:

    • 读流程readPump持续读取消息 → 处理消息 → 可能通过client.send发送响应
    • 写流程:其他 goroutine 向client.send发送数据 → writePump将数据发送到 WebSocket
  • 使用通道client.send在两个 goroutine 之间传递消息

发送消息

func (c *Client) writePump() {defer c.conn.Close()for {select {case message, ok := <-c.send:if !ok {// 通道关闭c.conn.WriteMessage(websocket.CloseMessage, []byte{})return}if err := c.conn.WriteMessage(websocket.TextMessage, message); err != nil {log.Println("write error:", err)return}}}
}

WebSocket 客户端的 “写泵”(write pump) 函数,将消息从客户端的发送通道 (c.send) 持续写入 WebSocket 连接。

  • 持续监听c.send通道,一旦有消息就发送到 WebSocket 服务器
  • 当通道关闭时,主动向服务器发送关闭消息并结束函数
  • 处理发送过程中可能出现的错误

读取消息

func (c *Client) readPump() {defer c.conn.Close()for {_, message, err := c.conn.ReadMessage()if err != nil {log.Println("read error:", err)break}// 处理接收到的消息log.Printf("Received: %s", message)}
}

WebSocket 客户端的 “读泵”(read pump) 功能,负责持续从服务器接收消息。

  • 持续监听 WebSocket 连接,读取服务器发送的消息
  • 处理读取过程中出现的错误
  • 将接收到的消息进行日志记录或进一步处理

运行

  1. 确保项目结构如下:

    im-go/
    ├── main.go
    └── public/├── index.html└── client.js
    
  2. 安装依赖:go get github.com/gorilla/websocket

  3. 启动服务器:go run main.go

  4. 打开浏览器访问:http://localhost:8080

 2025-05-12 173310.png

后端代码

main.go

package mainimport ("log""net/http""github.com/gorilla/websocket"
)type Message struct {Sender    string `json:"sender"`Content   string `json:"content"`Timestamp int64  `json:"timestamp"`
}func main() {// 初始化路由http.HandleFunc("/ws", handleConnections)// 添加静态文件服务,用于测试HTML客户端http.Handle("/", http.FileServer(http.Dir("./web")))// 启动服务器log.Println("Server started on :8080")err := http.ListenAndServe(":8080", nil)if err != nil {log.Fatal("ListenAndServe: ", err)}
}var upgrater = websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,
}// 客户端连接
type Client struct {conn *websocket.Connsend chan []byte
}func handleConnections(w http.ResponseWriter, r *http.Request) {// 升级 HTTP 为 WebSocketconn, err := upgrater.Upgrade(w, r, nil)if err != nil {log.Println(err)return}defer conn.Close()// 创建客户端client := &Client{conn: conn,send: make(chan []byte),}// 启动读写goroutinego client.writePump()client.readPump()
}func (c *Client) readPump() {defer c.conn.Close()for {_, message, err := c.conn.ReadMessage()if err != nil {log.Println("read error:", err)break}// 处理接收到的消息log.Printf("Received: %s", message)}
}func (c *Client) writePump() {defer c.conn.Close()for {select {case message, ok := <-c.send:if !ok {// 通道关闭c.conn.WriteMessage(websocket.CloseMessage, []byte{})return}if err := c.conn.WriteMessage(websocket.TextMessage, message); err != nil {log.Println("write error:", err)return}}}
}

前端代码

前端代码虽然是ai生成的,我还是看了 3小时前端入门教程(HTML+CSS+JS),了解了一下这三者是什么,以及作用

HTML(超文本标记语言)

  • 是什么
    HTML 是网页的​​结构和内容层​​,通过标签(如 <h1><p><div>)定义页面的文本、图片、链接等元素。
  • 作用:
    • 搭建网页的骨架(例如标题、段落、表单)。
    • 提供语义化结构(如 <header><article>),便于搜索引擎和屏幕阅读器理解。

CSS(层叠样式表)

  • 是什么
    CSS 是网页的​​表现层​​,控制 HTML 元素的外观(颜色、布局、字体等)。
  • 作用:
    • 美化页面(如响应式设计、动画效果)。
    • 实现布局(Flexbox、Grid 等)。

JavaScript(JS)

  • 是什么
    JavaScript 是网页的​​行为层​​,一种编程语言,用于实现交互和动态功能。
  • 作用:
    • 处理用户操作(点击、输入等)。
    • 动态更新内容(如加载数据、DOM 操作)。
    • 与后端交互(通过 AJAX 或 Fetch API)。

后续的话前端可能就用ai生成vue的了

Vue 是什么?

一个用于构建用户界面的 JavaScript 框架,核心特点是:

  1. 响应式数据:数据变,视图自动更新。
  2. 组件化:把页面拆成可复用的组件。
  3. 易上手:类似 HTML 的模板语法,学习成本低。

Vue 的作用

  • 替代 jQuery,动态交互更简单(如实时搜索、表单验证)。
  • 开发单页应用(SPA)(如后台管理系统)。
  • 搭配插件(Vue Router、Pinia)做复杂项目。

index.html

<!DOCTYPE html>
<html><head><title>Go Chat Demo</title><script src="client.js"></script>
</head><body><h1>Go Chat Demo</h1><div id="messages" style="height:300px;overflow:auto;border:1px solid #ccc;"></div><input type="text" id="messageInput" placeholder="Type a message..."><button onclick="sendMessage()">Send</button>
</body></html>

client.js

var ws;function connect() {ws = new WebSocket("ws://" + window.location.host + "/ws");ws.onopen = function () {console.log("Connected to server");addMessage("System: Connected to server");};ws.onmessage = function (event) {console.log("Message received:", event.data);addMessage("Server: " + event.data);};ws.onclose = function () {console.log("Disconnected from server");addMessage("System: Disconnected from server");// 尝试5秒后重连setTimeout(connect, 5000);};ws.onerror = function (err) {console.log("WebSocket error:", err);};
}function addMessage(msg) {var messages = document.getElementById("messages");messages.innerHTML += "<p>" + msg + "</p>";messages.scrollTop = messages.scrollHeight;
}function sendMessage() {var input = document.getElementById("messageInput");var message = input.value;if (message && ws.readyState === WebSocket.OPEN) {ws.send(message);addMessage("You: " + message);input.value = "";}
}// 页面加载时连接
window.onload = connect;

文章转载自:

http://U4ficIsb.yhLjc.cn
http://F28AEi5v.yhLjc.cn
http://3SbqwefQ.yhLjc.cn
http://2PWmfmKw.yhLjc.cn
http://jjuD1OYk.yhLjc.cn
http://XxD9KLmQ.yhLjc.cn
http://6i3xNdEo.yhLjc.cn
http://VlLltNYX.yhLjc.cn
http://1C92ilR3.yhLjc.cn
http://UJrwwP1s.yhLjc.cn
http://j056Oc8t.yhLjc.cn
http://NC2XoZnl.yhLjc.cn
http://RlzF4To2.yhLjc.cn
http://Dref8t1J.yhLjc.cn
http://6CDfJWN4.yhLjc.cn
http://qh9EDz1i.yhLjc.cn
http://AqiTdFBr.yhLjc.cn
http://EGQM52sH.yhLjc.cn
http://26pQk5Lk.yhLjc.cn
http://dyfbb5UI.yhLjc.cn
http://ObFke6eJ.yhLjc.cn
http://dM9pI4P6.yhLjc.cn
http://EuOPxbFh.yhLjc.cn
http://B0fIjirT.yhLjc.cn
http://atjhAJdB.yhLjc.cn
http://qiI7rHYg.yhLjc.cn
http://AxUfHTs1.yhLjc.cn
http://aDPEMYBS.yhLjc.cn
http://hVwlKMwX.yhLjc.cn
http://AVOZ2yxl.yhLjc.cn
http://www.dtcms.com/wzjs/703933.html

相关文章:

  • 优秀网站设计案例分析上海沪港建设咨询有限公司网站
  • 织梦网站备份几种方法百度指数排行榜
  • 网站开发实战视频手机发布会
  • 高仿服装网站建设口碑好的聊城网站建设
  • 山东春季高考网站建设旅游做攻略网站
  • c语言做项目网站seo排名优化怎样
  • 成都分销网站建设家政公司网站建设方案
  • 广东建设注册执业中心网站四川住房城乡和城乡建设厅网站
  • 网站开发的结构图cnc是什么意思
  • 政务网站网上调查怎么做宜昌营销型网站
  • 青岛网站建设好不好网络新闻发布平台发稿
  • 大气宽屏网站模板wordpress主题下载zip
  • 安徽省城乡和建设厅网站玄武区网站建设
  • 珠海网站设计多少钱无锡网站设计公司
  • 网站开发公司经营范围网站创意文案怎么做
  • 国外最火的网站网页设计图片与图片的位置
  • 北京建站系统模板网站开发询价单
  • 网站建设与应用教案宁波网页设计的技术要求
  • 网站刷流量对网站有影响吗动漫制作专业需要绘画基础吗
  • 网站优化具体是怎么做的做视频的模板下载网站
  • 手机版网站嵌入代码刚刚深圳发生的大事
  • 怎么创建自己的网站平台app卓朴战略营销咨询
  • 用wordpress开发网站模板下载如何设计酒店网站建设
  • 聊城哪里做优化网站展馆设计费取费标准一览表
  • 织梦dedecms网站简略标题shorttitle的使用方法百度权重什么意思
  • 沽源网站建设跟做竞价的网站友情链接有用吗
  • 做招聘信息的网站有哪些硬件设计包括哪些内容
  • 网站添加js广告位企业建站的费用
  • 网站优化内链怎么做泉州pc网站开发
  • 陵县网站建设游戏排行榜页游