WebSocket SocketIO 连接不适用于 Heroku 上的 NestJS 服务器并在 Vercel 上反应客户端
Posted
技术标签:
【中文标题】WebSocket SocketIO 连接不适用于 Heroku 上的 NestJS 服务器并在 Vercel 上反应客户端【英文标题】:WebSocket SocketIO connection not working with NestJS server on Heroku and react client on Vercel 【发布时间】:2020-10-04 04:34:22 【问题描述】:我有一个在 herokou.com 上运行的#NestJS 服务器和一个在 vercel.com 上运行的 react CRA 应用程序 我正在尝试使用 websockets (socket.io) 连接前端和后端 但是没有建立连接。在控制台中,网络请求没有显示错误,但 GET 请求对应于 socket.io 超时。没有回应。 这就是nestjs网关的编写方式。 我可以看到网关的日志正在初始化。但是,即使我尝试打开客户端,也没有连接/断开连接的日志。
@WebSocketGateway()
export class AppGateway
implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect
users: Record<string, any> = ;
@WebSocketServer() server;
afterInit(server: any)
this.logger.log('Initialized');
handleConnection(client: any, ...args: any[])
console.log('connected.');
if (!this.users[client.id])
this.users[client.id] = client.id;
client.emit('yourID', client.id);
this.server.emit('allUsers', this.users);
在客户端我是这样连接的
socket.current = io.connect(
"https://server.herokuapp.com:" + props.port
);
我检查过 props.port 没问题。 只是开发者工具窗口的网络请求中的GET请求超时,没有响应。 例子: https://server.herokuapp.com:43030/socket.io/?EIO=3&transport=polling&t=NAq8j0w 此 GET 无响应并超时。
【问题讨论】:
【参考方案1】:我认为在客户端,初始化socket.io的方式是通过
import io from "socket.io-client";
const socket = io("http://DOMAIN:IP"); // or https
或者如果你想在 react Ref 挂钩中使用它:
const socket = useRef();
socket.currect = io("http://DOMAIN:IP"); // or https
或者我认为是一行:const socket = useRef(io("http://DOMAIN:IP")); // or https
【讨论】:
以上是关于WebSocket SocketIO 连接不适用于 Heroku 上的 NestJS 服务器并在 Vercel 上反应客户端的主要内容,如果未能解决你的问题,请参考以下文章
Flask-SocketIO - WebSocket 在连接建立之前关闭。 [Heroku]
SSL WebSocket 连接不适用于 webkit 浏览器?
与 Hasura 的 WebSocket 连接不适用于 Node.js 上的 ApolloClient v3
使用 nginx 的 Websocket 代理不适用于 tomcat。