7

我已经使用 svelte 和 sapper 编写了一些应用程序,并认为我会尝试使用 sveltekit。总而言之,它可以工作,但我现在遇到了在服务器上注册工作人员的问题。

基本上我正在尝试将 socket.io 添加到我的应用程序中,因为我希望能够从服务器发送和接收数据。有了 sapper,这并不是一个真正的问题,因为您拥有server.js可以将 socket.io 连接到 polka/express 服务器的文件。但我在 sveltekit 和 vite 中找不到任何等价物。

我做了一些实验,可以在路由中创建一个新的 socket.io 服务器,但这会导致一系列新问题,例如它位于单独的端口上并导致 cors 问题。

所以我想知道这是否可以使用 sveltekit 以及如何访问底层服务器?

4

2 回答 2

4

@sveltejs/adapter-node还构建了与 express/polka 兼容的中间件,该中间件公开build/middelwares.js,您可以将其导入自定义/server.cjs

const {
  assetsMiddleware,
  prerenderedMiddleware,
  kitMiddleware,
} = require("./build/middlewares.js");

... 

app.use(assetsMiddleware, prerenderedMiddleware, kitMiddleware);

节点适配器还有一个entryPoint选项,它允许将自定义服务器捆绑到构建中,但我在使用这种方法时遇到了问题。

在开发过程中不使用适配器(又名npx svelte-kit dev)。

但是使用svelte.config.js你可以将 socket.io 注入 vite 服务器:

  ...
  kit: {
    ...
    vite: {
      plugins: [
        {
          name: "sveltekit-socket-io",
          configureServer(server) {
            const io = new Server(server.httpServer);
            ...
          },
        },
      ],
    },
  },

注意:需要重新启动开发服务器以应用服务器代码中的更改。
您可以使用entr来自动执行该操作。

于 2021-09-19T13:57:52.520 回答
1

您无法连接到 polka/express 服务器,因为根据您选择的适配器,可能没有使用 polka/express 服务器 - 例如,如果您部署到无服务器平台。无服务器的套接字实现起来并不容易,它们的实现取决于提供者。

你提出了一个重要的问题,但现在恐怕这是不可能的——如果我错了,有人会纠正我。

您仍然可以做的是使用 SvelteKit 编写前端,将其构建为静态/SPA/节点应用程序,然后使用您自己的 polka/express 服务器构建。但是,您将失去 SvelteKit 提供的快速开发体验,因为您的开发将分为两部分:首先是客户端,然后是服务器。

编辑

您还可以使用数据推送第三个服务。它们使用起来很简单,但不一定是免费的。以下是 Vercel 页面中的数据推送服务列表:

  • 干练
  • 推杆
  • 酒吧小酒馆
  • Firebase 实时数据库
  • TalkJS
  • 送鸟
  • 超级基地
于 2021-05-20T08:12:06.473 回答