nc 模拟服务器_Go实战——实现一个并发时钟服务器
生命不止,继续 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实战——实现一个并发时钟服务器相关推荐
- go高性能tcp服务器,在Go中构建并发TCP服务器
开发一个并发TCP服务器,该服务器仅使用大约65行GO代码生成随机数. TCP和UDP服务器随处可见,通过TCP/IP网络为网络客户端提供服务.在本文中,我将在GO编程语言,返回随机数.对于来自TCP ...
- c++服务器开源项目,开源一个c++ lua服务器框架
一个跨平台的c++lua服务器快速解决方案,该框架即可快速响应服务器开发工作,设计思想:"让事情变得更简单" 网络底层采用libuv(node.js底层库),异步io助力使单线程也 ...
- 华为桌面云 服务器可以虚拟多少,一个桌面云服务器支持多少用户
一个桌面云服务器支持多少用户 内容精选 换一换 本节操作以Windows Server 2012操作系统的云服务器为例介绍实现多用户登录的操作步骤.Windows server2012服务器默认能够支 ...
- ce修改器如何骗过服务器,如何完美伪造一个宕机服务器?骗过攻击者
如何完美伪造一个宕机服务器?骗过攻击者,如果对你有帮助就看看吧,你是否还在为服务器被攻击而整天苦恼呢?今天给大家分享一个完美骗过攻击者伪造一个宕机服务器教程,让攻击者都不知道IP是死的还是已经处于宕机 ...
- 服务器cpu只显示一个核,云服务器的1核是指一个cpu吗
云服务器的1核是指一个cpu吗 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...
- 梦幻西游原服务器物品,梦幻西游:一个与世隔绝的服务器,物价自己定,无人能转出去!...
hello大家好,我是梦幻小九.在梦幻西游中,服务器数量大大小小有几百个,所有的服务器基本都是可以互通转入转出的,游戏道具在藏宝阁可以跨服购买的.但是唯独有一个特别的服务器,开服十几年前来,一直与其它 ...
- linux创建vnc服务器,五步建立一个VNC Linux服务器
[51CTO快译]VNC(Virtual Network Computing)可以让你登录进到远程服务器的桌面上(相比之下,SSH的X11只能让你在本地机器上打开几个窗口).这个很有用,设置起来也十分 ...
- 从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构
目录 引言 技术选型 正文 创建基础架构 IDEA创建项目 添加Netty监听端口 编写客户端进行测试 总结 引言 由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的. ...
- 监控自动上传自己的服务器,10 分钟实现一个自己的服务器监控器
需求 最近需要给自己的服务器添加监控器,目的是监控服务器的内存.CPU.磁盘占用率,资源占用率过高的话能给自己发个提醒,当前主流的平台一般会提供邮件.短息.甚至会提供微信提醒,不过这类提醒包含的噪音太 ...
最新文章
- “干细胞制剂制备与质检行业标准”上海“出炉”
- 小型Web应用扫描工具Grabber
- Python中数字以及算数运算符的相关使用
- Hyperledger Fabric 1.4 Kafka集群部署教程
- python常用模块(二)
- 67-Flutter中高德地图插件的使用
- 3.3_number_join_数字拼接问题
- 软考每日一练||网络工程师
- 洛谷 P1097 统计数字
- 消除ImageButton的灰色背景图片
- web安全:QQ号快速登录漏洞及被盗原理
- 新唐NUC980网络设置
- python selenium 的使用——alibaba询盘
- 虚拟机恢复初始化设置
- 专项审计有哪些?专项审计报告包含哪些内容?
- 喜欢花,喜欢海,喜欢日出和日落
- c语言小游戏小人的移动,C乐趣之移动的小人
- C++ lower_bound() upper_bound() 函数用法详解(深入了解,一文学会)
- FDC2214+STM32F103
- 高保真原型 | XMind优化方案的设计过程