【发布时间】:2021-09-16 15:24:51
【问题描述】:
我想知道使用 Next.js 的页面连接到我的 WebSockets 服务器的最佳方法是什么?我希望用户可以通过一个连接浏览页面,当他关闭页面时,他也会关闭 WebSockets 连接。我尝试使用 React 的 Context API:
const WSContext = createContext(null);
const Wrapper = ({ children }) => {
const instance = WebSocket("ws://localhost:3000/ws");
return <WSContext.Provider value={instance}>{children}</WSContext.Provider>;
};
export const useWS = () => useContext(WSContext);
export default Wrapper;
效果很好,但在创建连接时就不行了。基本的new WebSocket 语法不起作用,所以我必须使用第三方库,比如我不喜欢的react-use-websocket。同样令人不安的是我无法关闭连接。 Context 根本不知道页面何时关闭,而且库也不提供关闭连接的钩子。
我想知道在 Next.js 中处理 WebSockets 连接时最好的方法是什么。
【问题讨论】:
-
不太明白这个问题。页面关闭时连接会自动关闭。为什么
new WebSocket不起作用?你有什么错误吗? -
@Danila Next.js 进行服务器端渲染和静态站点生成。最初呈现页面时,WebSocket API 不可用。他们必须以
useEffect()钩子之类的方式调用new Websocket()以在客户端实例化它或使用其他方式来推迟 WebSocket 的实例化。 -
@Calvin 对,但是如果我使用一个可以创建新 WebSocket 连接的钩子,我会在每次需要使用 WebSocket 时创建一个新连接,不是吗?这就是我要避免的。