Skip to main content

go语言圣经-练习题Ch8.1-Clockwall世界时钟大盘

# 题目 修改clock2来支持传入参数作为端口号,然后写一个clockwall的程序,这个程序可以同时与多个clock服务器通信,从多个服务器中读取时间,并且在一个表格中一次显示所有服务器传回的结果,类似于你在某些办公室里看到的时钟墙。如果你有地理学上分布式的服务器可以用的话,让这些服务器跑在不同的机器上面;或者在同一台机器上跑多个不同的实例,这些实例监听不同的端口,假装自己在不同的时区。 $ TZ=US/Eastern ./clock2 -port 8010 & $ TZ=Asia/Tokyo ./clock2 -port 8020 & $ TZ=Europe/London ./clock2 -port 8030 & $ clockwall NewYork=localhost:8010 Tokyo=localhost:8020 London=localhost:8030 # 分析 CS结构的网络 服务端接受参数 port, 可以用 golang flag 标准库 定时通过网络io吐出时间 客户端接受参数 [city]:[host] 可以用 golang os.Args处理 一对多建立tcp连接,客户端维护一份大盘数据,预计会遇到并发写问题 客户端定时刷新 => 周期性打印大盘数据 # 解答 代码注释即编码思路 ## 服务端 package main import ( "flag" "io" "log" "net" "time" ) var port string func init() { flag.StringVar(&port, "port", "8000", "input port of the server") } // TZ=US/Eastern go run clock2.