【问题标题】:Call Socket IO instance from a component or API route on NextJS从 NextJS 上的组件或 API 路由调用 Socket IO 实例
【发布时间】:2020-05-02 04:14:26
【问题描述】:

当我在数据库中保存新记录时,我正在尝试从 API Route 端点调用我的套接字服务器实例,以便向所有 Socket IO 客户端发送广播。

Socket IO 在我的 NextJS 服务器中正常运行。

我创建了一个自定义 ./server/index.ts 来运行 NextJS 服务器和 Socket.io 服务器共享同一个端口。

客户端成功连接到 Socket IO 服务器。但是现在我希望当从浏览器调用到像 /api/save 这样的 API 路由时,我可以使用我的 Socket IO 服务器实例来发出广播。

但我不知道如何从项目中的其他文件中获取 Socket IO 服务器的实例。

谢谢。

./server/index.ts

import "reflect-metadata";
import { createServer } from 'http'
import { parse } from 'url'
import next from 'next'
import socketIo from "socket.io";

const port = parseInt(process.env.PORT || '3000', 10);
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {

    const http = createServer((req, res) => {
        const parsedUrl = parse(req.url!, true);
        const { pathname, query } = parsedUrl;

        if (pathname === '/a') {
            app.render(req, res, '/a', query)
        } else if (pathname === '/b') {
            app.render(req, res, '/b', query)
        } else {
            handle(req, res, parsedUrl)
        }
    }).listen(port);

    const ioServer = socketIo(http);
    ioServer.on("connection", function (socket) {
        console.log('An user has connected!');
        socket.on('disconnect', function () {
            console.log('An user has disconnected');
        });
    });

    // tslint:disable-next-line:no-console
    console.log(
        `> Server listening at http://localhost:${port} as ${
            dev ? 'development' : process.env.NODE_ENV
        }`
    );


});

【问题讨论】:

    标签: reactjs sockets socket.io next.js


    【解决方案1】:

    您不需要导出实例,只需在套接字文件中创建一个函数来执行任务,然后导出该函数并在任何您想要的地方使用它。

    【讨论】:

    • 嗨,Santgurial,为了实施您的解决方案,我发现了同样的问题。如何从项目的另一个文件调用 Socket IO 实例。仅供参考,我已在创建 Socket IO 实例的位置附加了我的 ./server/index.ts 文件。谢谢。
    • 您应该在不同的文件而不是服务器索引文件上创建套接字服务器,然后在该文件中启动服务器实例并创建使用该实例所需的所有函数,然后您将导出这些函数并在其他文件中使用它们。看这个来学习导出:developer.mozilla.org/en-US/docs/web/javascript/reference/…
    猜你喜欢
    • 2022-12-05
    • 2023-01-24
    • 1970-01-01
    • 2021-08-09
    • 2023-01-17
    • 2021-08-24
    • 2020-03-23
    • 1970-01-01
    • 2017-08-21
    相关资源
    最近更新 更多