初级会员
  • 第 42681 位会员
  • helloh2o
  • 2019-09-10 15:34:40
  • Offline
  • 22 18

最近发布的文章

    暂无

最近分享的资源

    暂无

最近的评论

  • 应用到系统已经是系统进程了,可以根据查找进程名字判断。但楼上说的监听一个端口是简单实用的好办法。
  • 我只是觉得上诉代码复杂了。job1优先job2,把job2放在第一层select的default里面就行了,相同时间点,job1有就会先执行job1。 而不是这种花里胡哨的写法,在job1,job2随机取了,如果是job2又去看是否有job1。 ``` // 第一个select如果先收到job1,则直接执行job1 select { case <-ctx.Done(): log.Println("收到结束信号,退出worker函数!") return case job1 := <-ch1: // 模拟job1需要1秒执行结束 log.Println(job1) time.Sleep(time.Second) case job2 := <-ch2: ```
  • 你好,请问哪里不安全了,麻烦指出来。 代码这里 https://gitee.com/helloh2o/lucky/blob/master/core/inet/broadcast.go
  • 我有用过类似的情景,但我是这样写的。 ``` for { // 优先管理连接 select { // add conn case ic := <-bNode.addConnChan: bNode.Connections[ic.GetUuid()] = ic bNode.clientSize++ // conn leave case key := <-bNode.delConnChan: delete(bNode.Connections, key) bNode.clientSize-- default: select { case pkg := <-bNode.onMessage: if pkg == nil { // stop Serve _ = bNode.Destroy() return } bNode.allMessages = append(bNode.allMessages, pkg) bNode.broadcast(pkg) default: time.Sleep(time.Millisecond * 50) } } } ```