gpt4 book ai didi

javascript - 是什么导致 eventSource 停留在 readyState 0?

转载 作者:数据小太阳 更新时间:2023-10-29 03:19:49 26 4
gpt4 key购买 nike

我在 azure 上有一个 go 应用程序,它根据在 url 中作为事件源“.co/stream/{id}”发送的 id 生成 SSE 连接。其中一个 ID 的使用频率高于其他 ID,并且已停止连接,但任何其他 ID 都可以正常连接。该应用程序位于 ubuntu 虚拟机中。

客户端与 vue 应用程序连接。

我不确定 azure 是否阻止了 url 或者连接是否有限制?

我尝试过的事情:

端点和端口已在 Azure 的网络配置中配置。重新启动应用程序和服务器工作几分钟(5-10 分钟),但随后在客户端上收到 Err_Connection_Refused。虚拟机上的 CPU 和内存使用率非常低

客户

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)
}
}

最佳答案

EventSource接口(interface)要求请求和响应的内容类型是text/event-stream,而不是application/jsontext/html等。并且它在客户端和服务器上需要相同的字符集。

所以我认为您可以尝试检查您的请求和响应是否包含 Content-Type header 。

对于服务器端,为 /stream 处理程序添加代码 c.Response.ContentType = "text/event-stream"

关于javascript - 是什么导致 eventSource 停留在 readyState 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55751259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com