如何通过在线服务器端事件托管 sveltekit 应用程序?

问题描述 投票:0回答:1

我最近完成了一个应用程序,通过让每个用户的客户端发出事件来模拟罗伯特规则。我通过 javascript EventSource 完成了此操作,该事件源在本地托管时完美运行。然而,当尝试在网络上托管它时,我遇到了一百万个问题。

这是代码的快照:

onMount(() => {
        const source = new EventSource(`/rooms/${roomId}/activity`, {
            withCredentials: false
        });
        const event = SSEvents[roomId as keyof typeof SSEvents];
        source.addEventListener(event, (e) => {
            const message = JSON.parse(e.data);
            const membername: string = message.name;
            delete message.name;
            if (message.type === 'set') {
                messageStore.update(($messageStore) => $messageStore.set(membername, message));
                if (membername === $user?.toString()) {
                    selectedValue = message.status;
                }
            }
            if (message.type === 'delete') {
                messageStore.update(($messageStore) => {
                    $messageStore.delete(membername);
                    return $messageStore;
                });
            }
        });
        return () => {
            source.close();
        };
    });
  1. 在 Vercel 上,EventSource 会导致 504“超时”错误,因为我认为事件流会在进行更改之前超时。
  2. 在 Cloudflare 上,EventSource 将继续出现在调试菜单的网络选项卡上,但会显示为空白。
  3. 在 Netlify 上,EventSource 将报告 502“Bad Gateway”错误。

如何在网络上托管 SSE 应用程序?

vercel sveltekit netlify cloudflare-pages
1个回答
0
投票

无法在 vercel、netlify 或 cloudflare 上使用 sse,因为这些提供商是无服务器的。服务器将不会保持开启状态,任何请求都会在 10 秒后超时。当响应具有流内容类型时,他们可能已经实施了保护

您必须使用节点适配器构建应用程序并将其托管在非无服务器提供商上。

© www.soinside.com 2019 - 2024. All rights reserved.