生命不止,继续 go go go !!!

golang就是为高并发而生的,为我们提供了goroutines和channel。虽然前面博客的代码片段中也有用到这两个关键字,但是一直没有组织好语言,也没有能力把goroutines和channel写好,那么估计我们先用,然后再看看的理解。

goroutines
A goroutine is a lightweight thread managed by the Go runtime.
几个关键字:轻量级,线程。

package mainimport (    "fmt"    "time")func say(s string) {    for i := 0; i < 5; i++ {        time.Sleep(100 * time.Millisecond)        fmt.Println(s)    }}func main() {    go say("world")    say("hello")}

区别:

f()     // call f(); wait for it to return  go f()  // create a new goroutine that calls f(); don't wait12

channels
Channels are the pipes that connect concurrent goroutines.
几个关键字:管道 连接。

package mainimport "fmt"func main() {    messages := make(chan string)    go func() { messages 

用了make声明,时引用类型。

顺序时钟服务器
之前的博客已经介绍了很多,如何使用net/http包来构建一个服务器,关于golang中time package在昨天的博客中也有介绍了。
TCP 服务器,直接上代码:

package mainimport (    "io"    "log"    "net"    "time")func main() {    listener, err := net.Listen("tcp", "localhost:8080")    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"))        if err != nil {            return        }        time.Sleep(1 * time.Second)    }}

然后go build即可。

nc命令介绍
centos上安装nc命令:

yum install nmap-ncat.x86_641

作用:
(1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
(2)端口的扫描,nc可以作为client发起TCP或UDP连接
(3)机器之间传输文件
(4)机器之间网络测速

使用nc命令模拟client获得服务器时间
后台运行服务器:

./clock &1

使用nc命令:

nc localhost 80801

输出结果:
2017-06-22 13:28:41
2017-06-22 13:28:42
2017-06-22 13:28:43
2017-06-22 13:28:44
2017-06-22 13:28:45
2017-06-22 13:28:46
2017-06-22 13:28:47
2017-06-22 13:28:48
2017-06-22 13:28:49
2017-06-22 13:28:50
2017-06-22 13:28:51
….

这是个顺序服务器,如果多个客户端连接的话,需要第一个结束后再执行第二个。

支持并发的始终服务器
很简单,在上面的代码在handle中加入关键字go即可:

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

运行结果:

nc 模拟服务器_Go实战——实现一个并发时钟服务器相关推荐

  1. go高性能tcp服务器,在Go中构建并发TCP服务器

    开发一个并发TCP服务器,该服务器仅使用大约65行GO代码生成随机数. TCP和UDP服务器随处可见,通过TCP/IP网络为网络客户端提供服务.在本文中,我将在GO编程语言,返回随机数.对于来自TCP ...

  2. c++服务器开源项目,开源一个c++ lua服务器框架

    一个跨平台的c++lua服务器快速解决方案,该框架即可快速响应服务器开发工作,设计思想:"让事情变得更简单" 网络底层采用libuv(node.js底层库),异步io助力使单线程也 ...

  3. 华为桌面云 服务器可以虚拟多少,一个桌面云服务器支持多少用户

    一个桌面云服务器支持多少用户 内容精选 换一换 本节操作以Windows Server 2012操作系统的云服务器为例介绍实现多用户登录的操作步骤.Windows server2012服务器默认能够支 ...

  4. ce修改器如何骗过服务器,如何完美伪造一个宕机服务器?骗过攻击者

    如何完美伪造一个宕机服务器?骗过攻击者,如果对你有帮助就看看吧,你是否还在为服务器被攻击而整天苦恼呢?今天给大家分享一个完美骗过攻击者伪造一个宕机服务器教程,让攻击者都不知道IP是死的还是已经处于宕机 ...

  5. 服务器cpu只显示一个核,云服务器的1核是指一个cpu吗

    云服务器的1核是指一个cpu吗 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

  6. 梦幻西游原服务器物品,梦幻西游:一个与世隔绝的服务器,物价自己定,无人能转出去!...

    hello大家好,我是梦幻小九.在梦幻西游中,服务器数量大大小小有几百个,所有的服务器基本都是可以互通转入转出的,游戏道具在藏宝阁可以跨服购买的.但是唯独有一个特别的服务器,开服十几年前来,一直与其它 ...

  7. linux创建vnc服务器,五步建立一个VNC Linux服务器

    [51CTO快译]VNC(Virtual Network Computing)可以让你登录进到远程服务器的桌面上(相比之下,SSH的X11只能让你在本地机器上打开几个窗口).这个很有用,设置起来也十分 ...

  8. 从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构

    目录 引言 技术选型 正文 创建基础架构 IDEA创建项目 添加Netty监听端口 编写客户端进行测试 总结 引言 由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的. ...

  9. 监控自动上传自己的服务器,10 分钟实现一个自己的服务器监控器

    需求 最近需要给自己的服务器添加监控器,目的是监控服务器的内存.CPU.磁盘占用率,资源占用率过高的话能给自己发个提醒,当前主流的平台一般会提供邮件.短息.甚至会提供微信提醒,不过这类提醒包含的噪音太 ...

最新文章

  1. “干细胞制剂制备与质检行业标准”上海“出炉”
  2. 小型Web应用扫描工具Grabber
  3. Python中数字以及算数运算符的相关使用
  4. Hyperledger Fabric 1.4 Kafka集群部署教程
  5. python常用模块(二)
  6. 67-Flutter中高德地图插件的使用
  7. 3.3_number_join_数字拼接问题
  8. 软考每日一练||网络工程师
  9. 洛谷 P1097 统计数字
  10. 消除ImageButton的灰色背景图片
  11. web安全:QQ号快速登录漏洞及被盗原理
  12. 新唐NUC980网络设置
  13. python selenium 的使用——alibaba询盘
  14. 虚拟机恢复初始化设置
  15. 专项审计有哪些?专项审计报告包含哪些内容?
  16. 喜欢花,喜欢海,喜欢日出和日落
  17. c语言小游戏小人的移动,C乐趣之移动的小人
  18. C++ lower_bound() upper_bound() 函数用法详解(深入了解,一文学会)
  19. FDC2214+STM32F103
  20. 高保真原型 | XMind优化方案的设计过程

热门文章

  1. 2.16 关于 Python Numpy 的说明-深度学习-Stanford吴恩达教授
  2. 一起学nRF51xx 8 -  Time
  3. STM32 基础系列教程 22 - CAN
  4. 连接器篇(二) 高频系列
  5. CRC24循环冗余校验码的FPGA实现
  6. 一、烧写最小linux系统
  7. IScroll5 上拉加载更多 及 item点击处理。
  8. artTemplate使用
  9. asterisk-通道变量列表
  10. Lab_2 OSPF