我正在制作一款使用Socket的。io风格的多人游戏。io和SvelteKit。当用开发服务器在本地托管项目时,一切都很好,但是当我部署到Vercel时,它会记录Failed to load resource: the server responded with a status of 404 ()
。
这是我现在的快递服务器。ts(非功能性)
import http from "HTTP";
import { handler } from './build/handler.js';
// Gives error: An import path cannot end with a '.ts' extension.
import injectSocketIO from "src/lib/socket-handler.ts";
import express from 'express';
const app = express();
const server = http.createServer(app);
injectSocketIO(server)
app.use(handler);
// Should I change something here?
server.listen(3000, () => {
console.log('Running on http://localhost:3000');
});
我能够使用vite插件在本地运行开发服务器,如下所示:
import injectSocketIO from "./src/lib/socket-handler";
plugins: [sveltekit(), {
name: "sveltekit-socket-io",
configureServer(server) {
injectSocketIO(server.httpServer);
},
}],
我尝试遵循这里概述的步骤,但我使用socket-handler.ts
而不是socket-handler.js
,并且不熟悉如何设置启动脚本以使用Vercel运行。任何帮助将非常感激!
我仍然在寻找更好的方法,但我通过将Express服务器放在Sveltesrc
目录之外来解决同样的问题。
我的代码和你的一样,只是从根目录导入socket-handler.js
:
// server.js
import express from 'express'
import injectSocketIO from './socket-handler.js'
import { handler } from './build/handler.js'
const app = express()
const server = http.createServer(app)
// Inject SocketIO
injectSocketIO(server)
// SvelteKit handlers
app.use(handler)
server.listen(3000, () => {
console.log('Running on http://localhost:3000')
})
现在运行npm run build && node server.js
来构建Svelte应用程序,然后启动Express服务器。
这个教程让我找到了这个解决方案。你基本上运行一个标准的Express服务器,添加套接字。让SvelteKit使用Express中间件处理其余部分。