Go语言学习编程实践:goroutine实现并发时钟服务器

简介: Go语言学习编程实践:goroutine实现并发时钟服务器

基于服务器一次处理多个客户端的连接,且各客户端之间保持独立的场景进行编写实例。

使用net包构建客户端与服务器间通信。


定期报告时间的tcp服务器


package main
import (
  "io"
  "log"
  "net"
  "time"
)
func main() {
  listener, err := net.Listen("tcp", "localhost:8000")
  if err != nil {
    log.Fatal(err)
  }
  for {
    conn, err := listener.Accept()
    if err != nil {
      log.Print(err)
      continue
    }
    handleConn(conn)
  }
}
func handleConn(c net.Conn) {
  defer c.Close()
  for {
    _, err := io.WriteString(c, time.Now().Format("2006-01-02 15:04:05 MST Mon\n"))
    if err != nil {
      return
    }
    time.Sleep(1 * time.Second)
  }
}


只读的tcp客户端程序


当前客户端需等待前一个客户端断开连接,才能读到服务器的时间。

由服务器顺序处理客户请求。

package main
import (
  "io"
  "log"
  "net"
  "os"
)
func main() {
  conn, err := net.Dial("tcp", "localhost:8000")
  if err != nil {
    log.Fatal(err)
  }
  defer conn.Close()
  mustCopy(os.Stdout, conn)
}
func mustCopy(dst io.Writer, src io.Reader) {
  if _, err := io.Copy(dst, src); err != nil {
    log.Fatal(err)
  }
}

当前采用多个客户端进行连接时,只有一个得到响应,如图:

21.png

只有前面的客户端断开连接,等待的客户端请求才会被处理,如图:

22.png


实现服务器支持并发的改变


23.png

在调用handleConn处添加go关键字,使它在自己的goroutine中执行。

相关文章
|
1月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
197 86
|
1月前
|
网络协议
端口最多只有65535个,为什么服务器能承受百万并发
服务器通过四元组(源IP、源端口、目标IP、目标端口)识别不同TCP连接,每条连接对应独立socket。数据包携带四元组信息,服务端据此查找对应socket进行通信。只要四元组任一元素不同,即视为新连接,可创建独立socket。资源充足时,单进程可支持百万级并发连接,socket与端口非一一对应。
106 10
端口最多只有65535个,为什么服务器能承受百万并发
|
9天前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
58 1
|
2月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
285 0
|
2月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
199 0
|
2月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
165 0
|
弹性计算 C语言 容器
云服务器EC云上开发学习体验
简述通过老师引导,自己学习体验个人简历网页的设计以及在这一过程遇到的一些小问题,最后是一些感悟与成长。
云服务器EC云上开发学习体验
|
弹性计算 编译器 开发工具
ECS给线上学习带来的全新体验
本文介绍了作者在学习面向对象编程基础这门课程时借助ECS的高效性与便利性大大提升了学习效率的学习经验,以及在使用ECS完成课程任务时的心得与体验,也表达了作者对阿里云平台为学生提供这一优秀的教学资源的感谢。
|
弹性计算 Linux
云服务器学习体验
在课堂上我们了解到了ECS云服务器的相关用途及优点便捷处,为了更好的认识和掌握云服务器的用法,在教程的帮助下,我使用阿里云的云服务器创建了Linux云系统,在LAMP的环境下制作了个人简历网站,对操作系统、云、网页制作等有了更深刻的了解。
|
存储 大数据 Linux
“ecs+”学习体验
在如今的互联网云时代,有幸体验到了阿里云这一超级云服务平台。在他的强大支撑下,本科计算机的学习变得更高效,更积极,更有成效。

热门文章

最新文章