昨天,一切都按我的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
}