I / O超时已连接到Firebase

时间:2018-11-13 22:06:17

标签: firebase go server firebase-cloud-messaging

昨天,一切都按我的Go应用程序中的预期进行了。我没有更改与防火墙/配置有关的任何内容。今天,当我尝试向“ https://fcm.googleapis.com/fcm/send”发送请求时,出现了下一个错误:

  

发布https://fcm.googleapis.com/fcm/send:拨打tcp:查询   IP:53上的fcm.googleapis.com:读取udp IP:37987-> IP:53:I / O超时

我不知道该错误如何发生。防火墙配置仍然相同。奇怪的是,如果我在本地进行测试,则可以正常工作,但是当我将其上传到服务器时,出现了该错误。

Plesk下的NGINX配置:

server_name mydomain.com;

location /api/v1 {

    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;

    fastcgi_read_timeout 2500;
    proxy_connect_timeout      2500;
    proxy_send_timeout         2500;
    proxy_read_timeout         2500;
    send_timeout               2500;
    proxy_pass          http://localhost:8082/api/v1;
}

更新 查看我从NGINX获得的日志

499 POST /api/v1/notifications HTTP/1.1

我的域没有SSL证书,这可能是导致超时的原因吗?

更新代码:

client, err := fcm.NewClient("KEY")
    if err != nil {
        fmt.Println(err)
    }

    handler.FirebaseClient = client
firebaseNotification := &fcm.Message{
        Notification: &fcm.Notification{
            Title: notificationData.Title,
            Body:  notificationData.Body,
        },
    }
firebaseNotification.RegistrationIDs = notificationData.Tokens

        fmt.Println(firebaseNotification)
        _, err := FirebaseClient.Send(firebaseNotification)
if err != nil {
            fmt.Println(err)
            return
        }

从库github.com/appleboy/go-fcm发送功能

func (c *Client) send(data []byte) (*Response, error) {
    // create request
    req, err := http.NewRequest("POST", c.endpoint, bytes.NewBuffer(data))
    if err != nil {
        return nil, err
    }

    // add headers
    req.Header.Add("Authorization", fmt.Sprintf("key=%s", c.apiKey))
    req.Header.Add("Content-Type", "application/json")

    // execute request
    resp, err := c.client.Do(req)
    if err != nil {
        return nil, connectionError(err.Error())
    }
    defer resp.Body.Close()

    // check response status
    if resp.StatusCode != http.StatusOK {
        if resp.StatusCode >= http.StatusInternalServerError {
            return nil, serverError(fmt.Sprintf("%d error: %s", resp.StatusCode, resp.Status))
        }
        return nil, fmt.Errorf("%d error: %s", resp.StatusCode, resp.Status)
    }

    // build return
    response := new(Response)
    if err := json.NewDecoder(resp.Body).Decode(response); err != nil {
        return nil, err
    }

    return response, nil
}

0 个答案:

没有答案