【发布时间】:2022-01-24 06:56:03
【问题描述】:
我的应用程序有问题。 基本上,虽然一切都在本地主机上运行顺利,但当我部署到 aws websocket 连接不起作用。 问题是,当我在 ec2 上发出 wss 请求时,它似乎确实让响应离开了机器,所以我的应用程序没有变成 101 并稳定连接,而是挂起等待 1 分钟过去并获得超时,然后它返回 200 但没有建立连接。 Api 是用 go lang 和 gin 框架编写的,app 是用 js 和 React 框架编写的。 在询问一些人的建议时,他们告诉我,我可以用 https“包装”一个 wss 请求,然后通过 lb 传递它并用 nginx 升级它,但我真的找不到类似的东西。 这是我的后端代码
main.go
{
ws.GET("/:id", func(c *gin.Context) {
websocket.ServeWs(c, pool)
})
}
websocket.go
ar upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool { return true },
}
func Upgrade(w http.ResponseWriter, r *http.Request) (*websocket.Conn, error) {
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return ws, err
}
return ws, nil
}
func ServeWs(c *gin.Context, pool *Pool) {
w := c.Writer
r := c.Request
conn, err := Upgrade(w, r)
if err != nil {
fmt.Fprintf(w, "%+V\n", err)
}
client := &Client{
Conn: conn,
Pool: pool,
ID: c.Param("id"),
}
pool.Register <- client
client.Read()
}
这是反应代码
const socket = new WebSocket(
`${
process.env.REACT_APP_ENV === "dev"
? "ws://localhost:8080"
: "wss://api.blabla.prod"
}/ws/${sessionStorage.getItem("userID")}`
);
let WebSocketConnect = () => {
console.log("Attempting Connection...");
socket.onopen = () => {
console.log("Successfully Connected");
};
socket.onclose = (event) => {
console.log("Socket Closed Connection: ", event);
// WebSocketConnect();
};
socket.onerror = (error) => {
console.log("Socket Error: ", error);
};
};
let sendMsg = (msg) => {
// console.log("sending msg: ", msg);
socket.send(msg);
};
export { WebSocketConnect, sendMsg, socket };
这里是 nginx 配置
server {
listen 80;
server_name api.blabla.prod;
if ($http_x_forwarded_proto = 'http') {
return 301 https://$server_name$request_uri;
}
location /ws {
proxy_pass "http://127.0.0.1:8080";
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8080";
}
}
提前致谢!
【问题讨论】:
标签: reactjs amazon-web-services go nginx websocket