Go开发 您所在的位置:网站首页 go源码 Go开发

Go开发

2023-10-15 13:10| 来源: 网络整理| 查看: 265

项目简介:

        为了巩固前期学习的Golang的基础知识,他是一个在线聊天项目,能够完成私聊、公聊、查询用户等功能。快速了解Golang写服务器的特点,顺带复习计算机网络的知识。

server中包含:server和user两种,user为个人用户,server为服务器。

OnilineMap:用来记录当前用户在线的情况。

channel:能够把消息广播给各个客户端。

user:两个go程,一个从channel中读取消息,一个负责从客户端发送消息。(读写分离)

项目架构图

1.构建基础Server

创建一个server.go用来完善服务端的一些基本构建

创建一个server对象 type Server struct { Ip string Port int } //创建一个server的接口 func NewServer(ip string, port int) *Server { server := &Server{ Ip: ip, Port: port, } return server } 启动服务器接口 //启动服务器的接口 func (this *Server) Start() { //socket listen listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", this.Ip, this.Port)) if err != nil { fmt.Println("net.Listen err:", err) return } //close listen socket defer listener.Close() for { //accept conn, err := listener.Accept() if err != nil { fmt.Println("listener accept err:", err) continue } //do handler go this.Handler(conn) }

创建一个main.go做为主入口

package main func main() { server := NewServer("127.0.0.1", 8888) server.Start() } 在terminal中启动服务 go build -o server main.go server.go ./server //另外再打开一个terminal nc 127.0.0.1 8888

可以观察到:链接建立成功

2.用户上线及广播功能

加入user.go

用客户端地址当作用户名

package main import "net" type User struct { Name string Addr string C chan string conn net.Conn } //创建一个用户的API func NewUser(conn net.Conn) *User { userAddr := conn.RemoteAddr().String() user := &User{ Name: userAddr, Addr: userAddr, C: make(chan string), conn: conn, } //启动监听当前user channel消息的goroutine go user.ListenMessage() return user } //监听当前User channel的 方法,一旦有消息,就直接发送给对端客户端 func (this *User) ListenMessage() { for { msg :=


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有