将套接字 IO 注册到 vite for sveltekit
registering socket IO to vite for sveltekit
我已经使用 svelte 和 sapper 编写了一些应用程序,我想我可以试试 sveltekit。
总而言之,它有效,但我现在 运行 正在处理在该服务器上注册工作人员的问题。
基本上我正在尝试将 socket.io 添加到我的应用程序,因为我希望能够从服务器发送和接收数据。使用 sapper 这并不是真正的问题,因为您有 server.js
文件,您可以在其中将 socket.io 连接到 polka/express 服务器。但是我在 sveltekit 和 vite 中找不到任何等效项。
我做了一些实验,我可以在路由中创建一个新的 socket.io 服务器,但这会导致一系列新问题,例如它在一个单独的端口上并导致 cors 问题。
所以我想知道这是否可以通过 sveltekit 实现,您如何访问底层服务器?
您无法连接到 polka/express 服务器,因为根据您选择的适配器,可能没有使用 polka/express 服务器 - 例如,如果您部署到无服务器平台。无服务器的套接字并不容易实现,它们的实现取决于提供者。
你提出了一个重要的问题,但现在恐怕这是不可能的 - 如果我错了,有人会纠正我。
您仍然可以做的是用 SvelteKit 编写前端,将其构建为 static/SPA/node 应用程序,然后从您自己的 polka/express 服务器使用您的构建。但是,您失去了 SvelteKit 提供的 swift 开发体验,因为您的开发将分为两部分:首先是客户端,然后是服务器。
编辑
您还可以使用数据推送器第三方服务。它们易于使用,但不一定免费。以下是来自 Vercel 页面的数据推送服务列表:
- 干练
- 推动者
- PubNub
- Firebase 实时数据库
- TalkJS
- 送鸟
- 超级数据库
公开为 build/middelwares.js
的 @sveltejs/adapter-node also builds express/polka compatible middleware,您可以将其导入自定义 /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 来实现自动化。
我已经使用 svelte 和 sapper 编写了一些应用程序,我想我可以试试 sveltekit。 总而言之,它有效,但我现在 运行 正在处理在该服务器上注册工作人员的问题。
基本上我正在尝试将 socket.io 添加到我的应用程序,因为我希望能够从服务器发送和接收数据。使用 sapper 这并不是真正的问题,因为您有 server.js
文件,您可以在其中将 socket.io 连接到 polka/express 服务器。但是我在 sveltekit 和 vite 中找不到任何等效项。
我做了一些实验,我可以在路由中创建一个新的 socket.io 服务器,但这会导致一系列新问题,例如它在一个单独的端口上并导致 cors 问题。
所以我想知道这是否可以通过 sveltekit 实现,您如何访问底层服务器?
您无法连接到 polka/express 服务器,因为根据您选择的适配器,可能没有使用 polka/express 服务器 - 例如,如果您部署到无服务器平台。无服务器的套接字并不容易实现,它们的实现取决于提供者。
你提出了一个重要的问题,但现在恐怕这是不可能的 - 如果我错了,有人会纠正我。
您仍然可以做的是用 SvelteKit 编写前端,将其构建为 static/SPA/node 应用程序,然后从您自己的 polka/express 服务器使用您的构建。但是,您失去了 SvelteKit 提供的 swift 开发体验,因为您的开发将分为两部分:首先是客户端,然后是服务器。
编辑
您还可以使用数据推送器第三方服务。它们易于使用,但不一定免费。以下是来自 Vercel 页面的数据推送服务列表:
- 干练
- 推动者
- PubNub
- Firebase 实时数据库
- TalkJS
- 送鸟
- 超级数据库
公开为 build/middelwares.js
的 @sveltejs/adapter-node also builds express/polka compatible middleware,您可以将其导入自定义 /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 来实现自动化。