go udp server事件服务器

14 篇文章 1 订阅
6 篇文章 0 订阅

目的

所有消息由udp server 接收,http协议进行获取,如智能面板中的udpserver 接收所有消息以后, 其他客户端可以获取所有流量
udp server 记录所有的数据结构和流量,能力,定义角色如下:对应服务类型和编号
sip server :1
media server :2
media server edge :3
ai server 推理服务器 :4
event server :5
nvr :6
ipc :7

分别启动udp 服务器 和http服务器

code 框架

package main
import (
	"io"
    "fmt"
    "net"
	"net/http"
    "os"
	"log"
	"container/list"
)


type s_client struct{
	*net.UDPAddr
    num int
	name string
}
 
var g_client = list.New()
//var g_clients map[uint]list //uint 是ssrc,list是请求的链表
var limitChan = make(chan bool, 1000)
// hello world, the web server
func HelloServer(w http.ResponseWriter, req *http.Request) {
	//返回服务器的端口地址,可以有多个服务器来进行负载均衡
    io.WriteString(w, "127.0.0.1:8080")
}
// UDP goroutine concurrency to read UDP maybe not parallelism,maybe in onethread maybe in multi thread,maybe yes,maybe no
func udpProcess(conn *net.UDPConn)  {
    data := make([]byte, 1460)
    n,remoteAddr,err := conn.ReadFromUDP(data)
    if err != nil {
        fmt.Println("Failed To Read UDP Msg, Error: " + err.Error())
    }

	if(data[0] == 0x80){//RTP 协议
		if n < 12 {
			fmt.Println("client error")
		}else {
			//转发
			conn.WriteToUDP([]byte("test"), remoteAddr)
		}
        //求取RTP ssrc
        return
	}

	//Call Endc Resp Read
	str :=string(data[0:3])
	if str == "Call" { //单点找人

	}else if str=="Pull" {//拉取流
		fmt.Println("pull")
		//ssrc := 1234
		//l := list.New()
		//l.PushBack(s_client{1,"name",remoteAddr})
        //g_clients[ssrc] = l
		g_client.PushBack(s_client{1,"name",remoteAddr})
	}else if str=="Audi" {//

	}else if str == "Chat" {

	}else if str == "Vide" {

	}else if str =="Flow" { //流量
		//存储流量
	}

    //str := string(data[:n])
    //fmt.Println("Reveive From Client, Data: " + str)
    <- limitChan
}

func udpServer(address string)  {
	fmt.Println("server start at udp 8080")
    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 httpServer(address string) {
	http.HandleFunc("/push", HelloServer)
	http.HandleFunc("/flow", flowServer)
	fmt.Println("server http start at 8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

func main() {

	//g_clients :=make(map[uint]list)
	//client[32]="qianbo"
    address := "0.0.0.0:8080"
	go httpServer(address)
       
    udpServer(address)
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: UDP(User Datagram Protocol)是一种无连接的传输协议,它用于在IP网络中传输数据。UDP Server工具是一种用于创建和管理UDP服务器的实用工具。UDP Server工具使得开发者能够使用UDP协议建立自定义的服务器应用程序。 UDP Server工具的主要功能包括以下几个方面: 1. 创建UDP服务器UDP Server工具提供了简单的界面,可以轻松地创建一个UDP服务器实例。开发者可以指定服务器的IP地址和端口号,并选择服务器的工作模式。 2. 接收和处理数据包:一旦UDP服务器成功创建,它将开始监听指定的端口,等待客户端发送的数据包。当服务器接收到一个数据包时,UDP Server工具将自动将数据提取出来,并将其传递给开发者指定的数据处理函数。开发者可以在处理函数中根据实际需求对数据进行解析和处理。 3. 发送数据包:UDP Server工具还提供了发送数据包的功能。开发者可以在服务器端通过UDP协议向指定的客户端发送数据包。这对于服务器端向客户端发送实时数据或响应客户端请求非常有用。 4. 监控和调试:UDP Server工具还具备监控和调试功能。开发者可以通过UDP Server工具查看服务器端向客户端发送的数据包,以便了解通信是否正常,以及数据的传输情况。 总之,UDP Server工具提供了一个简单而强大的方式来创建和管理UDP服务器,使开发者能够快速搭建UDP服务器应用,并更好地控制和监控数据传输过程。无论是实时数据传输还是低延迟通信,UDP Server工具都能为开发者提供良好的支持和辅助。 ### 回答2: UDP服务器工具是一种用于建立和管理UDP服务器的软件程序。UDP(User Datagram Protocol)是一种无连接的传输协议,它被广泛用于快速传递数据包,但不提供可靠性和错误检测。 UDP服务器工具提供了一种简单且有效的方式来管理UDP服务器。它可以监听特定的UDP端口,接收和处理来自客户端的UDP数据包。通过UDP服务器工具,用户可以定义自己的UDP服务器逻辑,以便根据特定的应用需求来处理传入的数据包。 UDP服务器工具通常提供了以下功能: 1. 管理UDP服务器的启动和停止:它允许用户通过指定服务器的监听IP地址和端口来启动UDP服务器,并在不需要时停止服务器的运行。 2. 接收和处理UDP数据包:UDP服务器工具可以监听指定的UDP端口,并处理来自客户端发送的数据包。它可以解析和提取数据包中的信息,并根据特定的应用逻辑来处理数据。 3. 回复和发送UDP数据包:UDP服务器工具可以回复客户端发送的数据包,将处理结果返回给客户端。它还可以根据应用需求主动发送UDP数据包给客户端。 4. 监控和日志记录:UDP服务器工具通常提供监控和日志记录功能,以便用户可以跟踪服务器的活动和诊断潜在的问题。 UDP服务器工具可用于各种应用场景,如网络游戏服务器、实时数据传输、传感器网络等。它们提供了一种简单而灵活的方式来构建和管理UDP服务器,以实现快速和高效的数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qianbo_insist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值