我有一个带有 socket.io 的 Nuxt 3 应用程序在 DigitalOcean 应用程序平台上运行,客户端无法连接到 web 套接字服务器。
Web 套接字运行在与应用程序相同的端口
3000
上,具有:
import startSocketServer from "./server/sockets"
export default defineNuxtConfig({
...
hooks: {
listen: (nuxtServer) => startSocketServer(nuxtServer)
},
...
});
import { Server } from "socket.io";
export default (nuxtServer) => {
const io = new Server(nuxtServer)
io.on("connection", (socket) => {
console.log(`connection ${socket.id}`)
});
};
在客户端我有:
const socketDomain = (isLocal) ? 'localhost:3000' : 'my.domain.com'
const socket = io(socketDomain, {
transports: ['websocket'],
socket.on("connect", () => {
console.log('connect')
});
socket.on("connect_error", (err) => {
console.log(`connect_error due to ${err}`);
});
应用程序在本地使用
nuxi dev
或 nuxi build && node .output/server/index.mjs
完美运行,但是当我在 DigitalOcean 上部署时,我得到以下信息:
WebSocket connection to 'wss://my.domain.com/socket.io/?EIO=4&transport=websocket' failed:
doOpen @ entry.3f5d167e.js:21
open @ entry.3f5d167e.js:20
open @ entry.3f5d167e.js:21
$i @ entry.3f5d167e.js:21
A1.exports @ entry.3f5d167e.js:21
open @ entry.3f5d167e.js:21
(anonymous) @ entry.3f5d167e.js:21
invoice.22658294.js:1 connect_error due to Error: websocket error
我也试过在不同的端口上使用网络套接字,但据我所知,DO 不支持它。
我也尝试过
transports: ['polling', 'websocket']
但我得到了xhr poll error
.
可能是什么问题?