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

使用go实现一个简单的聊天服务器

使用go实现一个简单的聊天服务器,对于客户端发送的消息,服务端添加时间戳和冒号后返回客户端。

1. 代码


import ("bufio""fmt""net""strings""time"
)func handleConnection(conn net.Conn) {defer conn.Close()fmt.Println("Client connected:", conn.RemoteAddr())reader := bufio.NewReader(conn)for {// 读取客户端消息message, err := reader.ReadString('\n')if err != nil {fmt.Println("Client disconnected:", conn.RemoteAddr())return}// 添加时间戳timestamp := time.Now().Format("2006-01-02 15:04:05")response := fmt.Sprintf("%s: %s", timestamp, strings.TrimSpace(message))// 返回处理后的消息conn.Write([]byte(response + "\n"))}
}func main() {// 监听 TCP 连接ln, err := net.Listen("tcp", ":8090")if err != nil {fmt.Println("Error listening:", err)return}defer ln.Close()fmt.Println("Server started on :8090")for {// 接受客户端连接conn, err := ln.Accept()if err != nil {fmt.Println("Error accepting connection:", err)continue}// 处理客户端连接go handleConnection(conn)}
}

2. 导出二进制包

# 打包x86部署包GOARCH=amd64 GOOS=linux go build -o gochat  main.go# 打包arm部署包GOARCH=arm64 GOOS=linux go build -o gochat main.go

3. 构建成镜像

Dockerfile:

# Build the stellaris-core binary
FROM alpine:3.11WORKDIR /workspace# Copy the go source
COPY gochat /gochat# Build
ENTRYPOINT ["/gochat"]

build.sh:

docker build -t gochat:v1 . -f Dockerfile

start.sh

docker run --name gochat  -d -p 8090:8090  docker.io/library/gochat:v1

4. 使用telnet测试

telnet localhost 8089send hello

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 机器学习/深度学习——梯度下降法(Gradient descent)详解. 步骤清晰 0基础可看
  • 月薪5W的项目经理是如何面试的?这份面试攻略请收好!
  • Jetson Orin NX 功耗模式选择:MAXN与25W模式的对比与优化建议
  • 聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现
  • IP地址证如何实现HTTPS访问?(内网IP、公网IP)
  • Python 之Scikit-learn(五) -- Scikit-learn提供的数据集及其详细介绍
  • 用户案例|Maple 软件在德国亚琛工业大学化学教学中的创新应用
  • PHPStorm 环境配置与应用详解
  • Axios 详解与使用指南
  • 子网掩码是什么以及子网掩码相关计算
  • Mysql的完整性约束
  • 奥运会奖牌榜-巴黎奥运会数据-历史奥运会数据
  • Hadoop YARN:现代大数据集群资源管理与作业调度
  • 20240814 每日AI必读资讯
  • 利用OncePerRequestFilter实现批量路经的转发
  • ES6指北【2】—— 箭头函数
  • 【刷算法】从上往下打印二叉树
  • Android系统模拟器绘制实现概述
  • CAP理论的例子讲解
  • Hibernate最全面试题
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • IOS评论框不贴底(ios12新bug)
  • javascript面向对象之创建对象
  • Java基本数据类型之Number
  • oschina
  • PHP的类修饰符与访问修饰符
  • PV统计优化设计
  • React系列之 Redux 架构模式
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SQLServer之索引简介
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 百度小程序遇到的问题
  • 仿天猫超市收藏抛物线动画工具库
  • 思否第一天
  • 无服务器化是企业 IT 架构的未来吗?
  • 移动端唤起键盘时取消position:fixed定位
  • ​如何防止网络攻击?
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • ## 1.3.Git命令
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C11) 泛型表达式
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转)ORM
  • *Django中的Ajax 纯js的书写样式1
  • .cfg\.dat\.mak(持续补充)
  • .net 7和core版 SignalR
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core 版本不支持的问题