У меня есть приложение go на Azure, которое генерирует соединения SSE в зависимости от идентификатора, отправляемого в URL в качестве источника события '.co / stream / {id}'.Один из этих идентификаторов использовался чаще других и прекратил подключение, но любой другой идентификатор подключился просто отлично.Приложение находится в виртуальной машине Ubuntu.
Клиент соединяется с приложением vue.
Я не уверен, блокирует ли Azure URL-адрес или существует ли ограничение на количество подключений?
Вещи, которые я пробовал:
Конечные точки и порты были настроены в конфигурации сети в Azure.Перезапуск приложения и сервера работает в течение нескольких минут (5-10 минут), но затем используется Err_Connection_Refused на клиенте.Использование процессора и оперативной памяти очень низкое на бэкэнде vm
client
var url = "example.co:3000/";
var streaming = "stream/";
var source = new EventSource(url + streaming + this.$route.params.idCine);
console.log("ready state connecting = " + source.readyState);
source.onmessage = function(event) {
console.log("ready state = " + source.readyState);
console.log('yay');
}
подключается к базе данных mysql и генерирует json для сообщения клиента
package controllers
import (
"github.com/revel/revel"
"cplsAPI/app"
"time"
"fmt"
"strconv"
)
type App struct {
*revel.Controller
}
type Order struct {
IdOrder int` json:"idOrder" `
OrderNum string` json:"orderNum" `
CustomerName string` json:"customerName" `
DeliveryPoint int` json:"deliveryPoint" `
ImageUrl string` json:"imageUrl" `
Timer int` json:"timer" `
Status int` json:"status" `
IdCine int` json:"idCine" `
}
func (c App) Index() revel.Result {
return c.Render()
}
func (c App) GetOrders() revel.Result {
idCine := c.Params.Route.Get("idCine")
sql := "SELECT * FROM Orders WHERE idCine = "+idCine+";"
rows, err := app.DB.Query(sql)
var resul []Order
checkErr(err)
for rows.Next() {
var idOrder int
var orderNum string
var customerName string
var deliveryPoint int
var imageUrl string
var timer int
var status int
var idCine int
var createdAt string
var updatedAt string
err = rows.Scan(&idOrder,&orderNum,&customerName,&deliveryPoint,&imageUrl,&timer,&status,&idCine,&createdAt,&updatedAt)
checkErr(err)
resul = append(resul, Order{IdOrder:idOrder , OrderNum:orderNum , CustomerName:customerName , DeliveryPoint:deliveryPoint , ImageUrl:imageUrl , Timer:timer , Status:status , IdCine:idCine})
// fmt.Printf("%+v\n", resul)
}
defer rows.Close()
return c.RenderJSON(resul)
}
func (c App) NewOrder() revel.Result {
idCine := c.Params.Route.Get("idCine")
var jsonData Order
c.Params.BindJSON(&jsonData)
// fmt.Printf("%+v",jsonData)
// fmt.Printf("\n")
// fmt.Printf(jsonData.OrderNum)
// fmt.Printf("\n")
sql:= fmt.Sprintf("INSERT Orders (orderNum, customerName, deliveryPoint, imageUrl, timer, status, idCine) VALUES('%s', '%s', %d,'%s', %d, %d, %s)",jsonData.OrderNum,jsonData.CustomerName,jsonData.DeliveryPoint,jsonData.ImageUrl,jsonData.Timer,jsonData.Status,idCine)
// fmt.Printf(sql)
// fmt.Printf("\n")
// fmt.Printf(idCine)
res, err := app.DB.Exec(sql)
checkErr(err)
// fmt.Printf("=======================\n")
//var inserted Order
// fmt.Printf("%+v\n",res)
// fmt.Printf("=======================\n")
id, err := res.LastInsertId()
checkErr(err)
idCineInt, err := strconv.Atoi(idCine)
jsonData.IdOrder = int(id)
jsonData.IdCine = idCineInt
//id, err := res.LastInsertId()
//checkErr(err)
//fmt.Println(id)
// timerInt, err := strconv.ParseInt(timer,10,32)
checkErr(err)
//defer res.Close()
time.AfterFunc(300*time.Second, func() {
// fmt.Printf("===UPDATE===")
updt := fmt.Sprintf("DELETE FROM Orders WHERE idOrder=%d AND idCine=%s",id,idCine)
rows, err := app.DB.Query(updt)
checkErr(err)
defer rows.Close()
//fmt.Println(rows)
})
data := make(map[string]interface{})
data["error"] = nil
data["data"] = jsonData
return c.RenderJSON(data)
}
func (c App) UpdateOrder() revel.Result {
idCine := c.Params.Route.Get("idCine")
var jsonData Order
c.Params.BindJSON(&jsonData)
idCineInt, err := strconv.Atoi(idCine)
// fmt.Printf("===UPDATE===")
dlt := fmt.Sprintf("DELETE FROM Orders WHERE orderNum='%s' AND idCine=%s",jsonData.OrderNum,idCine)
rows, err := app.DB.Query(dlt)
checkErr(err)
fmt.Println(rows)
//jsonData.IdOrder = int(id)
jsonData.IdCine = idCineInt
defer rows.Close()
data := make(map[string]interface{})
data["error"] = nil
data["data"] = jsonData
return c.RenderJSON(data)
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}