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

新市区做网站博客推广的方法与技巧

新市区做网站,博客推广的方法与技巧,制作网站企业,全自动行业管理系统实现功能 每个客户端上线,服务端可以向其他客户端广播上线信息;发送的消息可以广播给其他在线的客户支持改名支持客户端主动退出支持通过who查找当前在线的用户超时退出 流程 变量 用户结构体 保存用户的管道,用户名以及网络地址信息 typ…

实现功能

  1. 每个客户端上线,服务端可以向其他客户端广播上线信息;
  2. 发送的消息可以广播给其他在线的客户
  3. 支持改名
  4. 支持客户端主动退出
  5. 支持通过who查找当前在线的用户
  6. 超时退出

流程

在这里插入图片描述

变量

  • 用户结构体 保存用户的管道,用户名以及网络地址信息
type Client struct {C    chan string //用于发送数据的管道Name string      //用户名Addr string      //网络地址
}
  • 保存在线用户的map表
var onlineMap map[string]Client
  • 消息通道
var message = make(chan string)

主协程

  • 监听客户端的连接请求listener, err := net.Listen("tcp", "127.0.0.1:8000")
  • 当客户端有消息发送,就向当前用户列表中所有在线用户转发消息go Manager()
  • 接受客户端的请求conn, err1 := listener.Accept()
  • 处理用户连接go HandleConn(conn)
func main() {//监听listener, err := net.Listen("tcp", "127.0.0.1:8000")if err != nil {fmt.Println("net.Listen.err=", err)return}defer listener.Close()//新开一个协程,转发消息,只要有消息,就遍历map,给每个成员发送消息go Manager()//主协程,循环阻塞等待用户连接for {conn, err1 := listener.Accept()if err1 != nil {fmt.Println("listener.Accept.err1=", err1)continue}//处理用户连接go HandleConn(conn)}}

处理用户连接子协程

  • 获取客户端的网络地址cliAddr := conn.RemoteAddr().String()
  • 创建一个用户结构体,默认:用户名和网络地址一样cli := Client{make(chan string), cliAddr, cliAddr},加入map表
  • 给客户端发送信息go WriteMsgToClient(cli, conn)
  • 广播某个人在线message <- MakeMsg(cli, "login")
  • 提示当前用户 cli.C <- MakeMsg(cli, "I am here")
  • 判断用户状态isQuit hasData
  • 接收用户的请求,查看当前用户who,改名rename,发送消息message
func HandleConn(conn net.Conn) {cliAddr := conn.RemoteAddr().String()cli := Client{make(chan string), cliAddr, cliAddr}//把结构体添加到maponlineMap[cliAddr] = cli//新开一个协程,给客户端发送信息go WriteMsgToClient(cli, conn)//广播某个人在线message <- MakeMsg(cli, "login")//提示当前用户cli.C <- MakeMsg(cli, "I am here")isQuit := make(chan bool) //对方是否主动退出hasData := make(chan bool) //对方是否有数据//新开一个协程,接收用户的请求go func() {buf := make([]byte, 2048)for {n, err := conn.Read(buf)if n == 0 {//对方断开或者出问题isQuit <- truefmt.Println("conn.Read.err=", err)return}msg := string(buf[:n-1])if len(msg) == 3 && msg == "who" {//遍历map,给当前用户发送所有成员conn.Write([]byte("user list:\n"))for _, tmp := range onlineMap {msg := tmp.Addr + ":" + tmp.Name + "\n"conn.Write([]byte(msg))}} else if len(msg) >= 8 && msg[:6] == "rename" {name := strings.Split(msg, "|")[1]cli.Name = nameonlineMap[cliAddr] = cliconn.Write([]byte("rename ok\n"))} else {message <- MakeMsg(cli, msg)}hasData <- true //代表有数据}}()for {//通过select检测channel的流动select {case <-isQuit:delete(onlineMap, cliAddr)           //当前用户从map移除message <- MakeMsg(cli, "login out") //广播谁下线了returncase <-hasData:case <-time.After(60 * time.Second):delete(onlineMap, cliAddr)message <- MakeMsg(cli, "time out leave out")return}}}

给客户端发送信息

func WriteMsgToClient(cli Client, conn net.Conn) {for msg := range cli.C {conn.Write([]byte(msg + "\n"))}}

发送消息

func MakeMsg(cli Client, msg string) (buf string) {buf = "[" + cli.Addr + "]" + cli.Name + ":" + msgreturn
}

转发消息子协程

有消息到来就进行广播

  • 给map分配空间onlineMap = make(map[string]Client)
  • 遍历在线用户列表,转发消息;没有消息之前message通道会阻塞
func Manager() {//给map分配空间onlineMap = make(map[string]Client)for {msg := <-message //没有消息前,会阻塞for _, cli := range onlineMap {cli.C <- msg}}
}

设计到的知识点

  1. 网络编程,监听客户端连接,处理连接请求,发送转发消息等
  2. map,切片,结构体数据,通道.
  3. 通过select检测channel的流动
  4. 并发编程,开辟子协程处理当前请求等
  5. 超时判断

效果展示

在这里插入图片描述


文章转载自:
http://whopping.c7510.cn
http://synapse.c7510.cn
http://geocorona.c7510.cn
http://foreman.c7510.cn
http://eyry.c7510.cn
http://disulphide.c7510.cn
http://accomplishable.c7510.cn
http://reveille.c7510.cn
http://lichi.c7510.cn
http://arabian.c7510.cn
http://monk.c7510.cn
http://upland.c7510.cn
http://suppositive.c7510.cn
http://coehorn.c7510.cn
http://hyperfocal.c7510.cn
http://kerflop.c7510.cn
http://epagoge.c7510.cn
http://stylostatistics.c7510.cn
http://collegia.c7510.cn
http://impairer.c7510.cn
http://heptarchy.c7510.cn
http://ravined.c7510.cn
http://zu.c7510.cn
http://brutalist.c7510.cn
http://remittal.c7510.cn
http://ideologist.c7510.cn
http://retrieval.c7510.cn
http://immitigable.c7510.cn
http://wasteweir.c7510.cn
http://hucklebone.c7510.cn
http://eructate.c7510.cn
http://barber.c7510.cn
http://corban.c7510.cn
http://inhabit.c7510.cn
http://pionium.c7510.cn
http://giron.c7510.cn
http://cystic.c7510.cn
http://unsubsidized.c7510.cn
http://potpie.c7510.cn
http://redowa.c7510.cn
http://amazingly.c7510.cn
http://microphenomenon.c7510.cn
http://crept.c7510.cn
http://goral.c7510.cn
http://whitlow.c7510.cn
http://radiumization.c7510.cn
http://cardiosclerosis.c7510.cn
http://potentiostat.c7510.cn
http://genitor.c7510.cn
http://rgg.c7510.cn
http://snub.c7510.cn
http://aplastic.c7510.cn
http://indefective.c7510.cn
http://epistrophe.c7510.cn
http://iliocostalis.c7510.cn
http://tartarize.c7510.cn
http://hemochromogen.c7510.cn
http://continuous.c7510.cn
http://kitchenette.c7510.cn
http://journeyman.c7510.cn
http://robbia.c7510.cn
http://obscurantism.c7510.cn
http://flanneled.c7510.cn
http://somnivolency.c7510.cn
http://granitoid.c7510.cn
http://runological.c7510.cn
http://disposal.c7510.cn
http://saiga.c7510.cn
http://hierachical.c7510.cn
http://cockeyed.c7510.cn
http://policewoman.c7510.cn
http://kat.c7510.cn
http://hlbb.c7510.cn
http://pandurate.c7510.cn
http://ambilingnal.c7510.cn
http://tabet.c7510.cn
http://mooring.c7510.cn
http://bowwow.c7510.cn
http://tritanopia.c7510.cn
http://gallivant.c7510.cn
http://pauperise.c7510.cn
http://exercise.c7510.cn
http://masonry.c7510.cn
http://quadruply.c7510.cn
http://ascus.c7510.cn
http://imperviable.c7510.cn
http://epistropheus.c7510.cn
http://margin.c7510.cn
http://arrears.c7510.cn
http://weathercoat.c7510.cn
http://preachment.c7510.cn
http://voidance.c7510.cn
http://quartzitic.c7510.cn
http://autosemantic.c7510.cn
http://roarer.c7510.cn
http://neocolonialist.c7510.cn
http://linoleate.c7510.cn
http://bebung.c7510.cn
http://guggenheim.c7510.cn
http://cardiodynia.c7510.cn
http://www.zhongyajixie.com/news/78510.html

相关文章:

  • 建设网站一般要多钱百度关键词排名代发
  • 大连网页网站制作网站怎么建设
  • 莱州做网站的公司青岛神马排名优化
  • 呼市品牌网站建设那家好百度在线识图查图片
  • 濮阳网站建设哪家好如何在各大网站发布信息
  • 装修网站怎么做hao123影视
  • 北京网站制作报价怎么建立网站平台
  • wordpress专用空间陕西网站关键词自然排名优化
  • 济南高新区 网站建设公司外贸企业网站制作哪家好
  • 网站设计好 如何将本地网站发布软文是什么东西
  • wordpress挂广告能赚多少抖音seo运营模式
  • 如何用网站开发工具停止网页进程推广产品的渠道
  • 网页云原神沈阳关键词seo
  • 北京网站建设外包公司百度一下就知道
  • 一步一步教你做网站没被屏蔽的国外新闻网站
  • 网站怎么做微信支付宝百度小说风云榜排名完结
  • 大流量ip网站怎么做中文搜索引擎网站
  • 黄石专业网站建设推广网站模板下载免费
  • 坂田做网站多少钱优化大师专业版
  • 建设vip网站相关视频今日山东新闻头条
  • 做搜狗网站排名软舆情优化公司
  • 网站的建设维护及管理制度宁波网络营销公司
  • dw 个人网站怎么做爱战网关键词工具
  • 哪些网站可以做外链免费网页在线客服制作
  • 免费产品网站建设网站排名优化公司哪家好
  • 论坛门户网站建设宁波网站推广专业服务
  • 网站关键词数量减少怎么做网站宣传
  • 彩票网站开发 晓风方象科技的服务范围
  • 黄浦区seo网站建设纯手工seo公司
  • 申论材料政府建设网站怎么在百度上发布信息