加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang 高性能UDP Server实现

发布时间:2020-12-16 09:28:05 所属栏目:大数据 来源:网络整理
导读:通过Goroutine实现UDP消息并发处理 package mainimport ( " net " " fmt " " os " ) // 限制goroutine数量 var limitChan = make(chan bool , 1000 ) // UDP goroutine 实现并发读取UDP数据 func udpProcess(conn * net.UDPConn) { // 最大读取数据大小 data

通过Goroutine实现UDP消息并发处理

package main

import (
    "net"
    "fmt"
    "os"
)

// 限制goroutine数量
var limitChan = make(chan bool,1000)


// UDP goroutine 实现并发读取UDP数据
func udpProcess(conn *net.UDPConn) {

    // 最大读取数据大小
    data := make([]byte,1024)
    n,_,err := conn.ReadFromUDP(data)
    if err != nil {
        fmt.Println("failed read udp msg,error: " + err.Error())
    }
    str := string(data[:n])
    fmt.Println("receive from client,data:" + str)
    <- limitChan
}


func udpServer(address string) {
    udpAddr,err := net.ResolveUDPAddr("udp",address)
    conn,err := net.ListenUDP("udp",udpAddr)
    defer conn.Close()
    if err != nil {
        fmt.Println("read from connect failed,err:" + err.Error())
        os.Exit(1)
    }

    for {
        limitChan <- true
        go udpProcess(conn)
    }
}

func main() {
    address := "0.0.0.0:8080"
    udpServer(address)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读