【发布时间】:2023-01-07 21:08:55
【问题描述】:
我有一个 Next.js 项目,它设置了最简单的 Socket.IO 实现。下面是代码。
// pages/index.tsx
let socket: Socket;
const Home: NextPage = () => {
useEffect(() => {
async function socketInit() {
//start server
await fetch("http://localhost:3000/api/socket");
// connects to the socket
socket = io();
socket.on("connect", () => {
console.log("hello");
});
}
socketInit();
}, []);
return (
<button
onClick={() => {
socket.emit("test");
}}
>
hello
</button>
);
};
// pages/api/socket.ts
export default function handler(
req: NextApiRequest,
res: Res
) {
if (res.socket.server.io) { res.end(); return; }
const io = new IOServer(res.socket.server);
res.socket.server.io = io;
io.on('connection', socket => {
socket.on('test', () => {
console.log("1"); //Changing it to "2" doesn't do anything until dev is restarted.
});
});
res.end();
}
出于某种原因,服务器中的listener 不会从热重载更新。重启开发是唯一的方法。这是为什么?
【问题讨论】:
标签: node.js websocket next.js socket.io