Я пытаюсь развернуть свое приложение на vercel с помощью адаптера узла. Я знаю, что мне следует использовать адаптер vercel, но я внес некоторые изменения, чтобы заставить sveltekit работать с socket.io. Я следовал этому руководству: https://joyofcode.xyz/using-websockets-with-sveltekit.
Адаптер Node создает файлы index.js
и handler.js
в вашей папке сборки, когда вы запускаете npm run build — создание пользовательского сервера работает путем импорта обработчика из build/handler.js и использования вашего пользовательского сервера вместо index.js
. Затем я создал файл index.js в корне проекта со следующим содержимым:
import http from 'http';
import express from 'express';
import injectSocketIO from './src/lib/websockets/socketIoHandler.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.info('Running on http://localhost:3000');
});
я пытался каким-то образом сделать развертывание, но я не могу заставить его работать...
Как мне развернуть приложение на Vercel? Спасибо!
введите здесь описание изображения используя этот файл vercel.json:
{
"version": 2,
"builds": [
{
"src": "./index.js",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "/web/(.*)",
"dest": "/"
}
]
}
Проще говоря, адаптер-vercel существует, потому что Vercel в основном работает с интерфейсом и является бессерверным. socket.io не будет работать на Vercel главным образом потому, что Vercel заморозит ваше приложение (включая сокет) после того, как обнаружит бездействие в приложении.
Итак, TLDR; вы не можете использовать socket.io на Vercel. Вы можете увидеть больше об этом здесь: https://vercel.com/guides/do-vercel-serverless-functions-support-websocket-connections