Как написать метод запроса PUT конечной точки службы в CoAP в GoLang для сервера? - PullRequest
0 голосов
/ 18 января 2019

Я пытался написать клиент и сервер для обслуживания CoAP в GoLang. Я использовал https://github.com/dustin/go-coap для этого.

Я успешно смог вызвать конечную точку POST, но не смог вызвать PUT. Ниже приведены вопросы, которые у меня есть

  1. Когда я вызываю конечную точку 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)  
  1. Как я могу указать конечную точку службы 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?

1 Ответ

0 голосов
/ 04 февраля 2019

Согласно этому примеру:

https://github.com/dustin/go-coap/blob/master/example/server/coap_server.go

похоже, что обработчик go-coap связан только с URI. Я думаю, вам придется самостоятельно обрабатывать запросы разных типов.

НЕОБХОДИМО генерировать запрос с нераспознанным или неподдерживаемым кодом метода ответ 4,05 (метод не разрешен) в сочетании с ответом.

От: CoAP RFC 7252 Раздел 5.8 Определения методов

К сожалению, я не научился ходить и никогда не использовал go-coap, поэтому не могу показать фрагмент. Хотя я думаю, что это будет довольно просто: вам просто нужно ответить NON-4.05 с тем же MID и токеном.

...