Я пытался написать клиент и сервер для обслуживания CoAP в GoLang. Я использовал https://github.com/dustin/go-coap для этого.
Я успешно смог вызвать конечную точку POST, но не смог вызвать PUT.
Ниже приведены вопросы, которые у меня есть
- Когда я вызываю конечную точку POST, мой клиент Go сообщает об истечении времени ожидания. Но сервер получает запрос. Как я могу увеличить время ожидания клиента?
Какой я пробовал код:
Код клиента:
req := coap.Message{
Type: coap.Confirmable,
Code: coap.POST,
MessageID: 12345,
Payload: []byte(`Hello CoAP Server `),
}
path := "/App"
if len(os.Args) > 1 {
path = os.Args[1]
}
req.SetOption(coap.ETag, "weetag")
req.SetPathString(path)
c, err := coap.Dial("udp", "localhost:5683")
rv, err := c.Send(req)
- Как я могу указать конечную точку службы PUT в Go? Похоже, мы не указываем тип метода запроса для CoAP / UDP. Но, если, скажем, у меня есть приложение конечной точки PUT / {appId}. Он не принимает {appID}. это работает, только если я изменю это на app / appID. Но я хочу этот appID в качестве аргумента, а не путь.
Код клиента:
req := coap.Message{
Type: coap.Confirmable,
Code: coap.PUT,
MessageID: 12345,
Payload: []byte(`Hello CoAP Server `),
}
path := "/App/fb" //here fb is app id and this can be anything
if len(os.Args) > 1 {
path = os.Args[1]
}
req.SetOption(coap.ETag, "weetag")
req.SetPathString(path)
c, err := coap.Dial("udp", "localhost:5683")
rv, err := c.Send(req)
Код сервера для запросов POST и PUT:
mux := coap.NewServeMux()
// TODO-later: use UDP/coap
mux.Handle("/App", coap.FuncHandler(Register))
mux.Handle("/App/{AppID}", coap.FuncHandler(UpdateApp))
err := coap.ListenAndServe("udp", ":5683", mux)
Вот код сервера для обновления приложения по запросу PUT. Здесь я не знаю, как я могу указать конечную точку как PUT в CoAP. Может кто-нибудь предложить мне, как я могу создать эту конечную точку mux.Handle("/App/{AppID}", coap.FuncHandler(UpdateApp))
как PUT?
Или даже дайте мне знать, если есть лучшая библиотека Go для CoAP Go Services?