Я попробовал переадресацию портов из модуля в мой локальный и выполнил команду Curl, которая также, похоже, не завершилась, они застряли на неопределенный срок, не зная, что я делаю неправильно, используя тот же вход для развертывания приложения fastapi на порту 8000 в другом модуле, но в том же домене, и это, кажется, работает полностью нормально, но соединение с сокетом не установлено.
ingress.yaml
Код: Выделить всё
---
apiVersion: v1
kind: ConfigMap
metadata:
name: websocket-headers
namespace: duck-backend
data:
Connection: "$connection_upgrade"
Upgrade: "$http_upgrade"
Host: "$host"
X-Real-IP: "$remote_addr"
X-Forwarded-For: "$proxy_add_x_forwarded_for"
X-Forwarded-Proto: "$scheme"
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: duck-backend-ingress
namespace: duck-backend
annotations:
kubernetes.io/ingress.class: 'nginx'
cert-manager.io/cluster-issuer: 'letsencrypt-prod'
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-buffering: "off"
nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
nginx.ingress.kubernetes.io/proxy-set-headers: 'duck-backend/websocket-headers'
spec:
ingressClassName: nginx
tls:
- hosts:
- example.com
secretName: race1-tls
rules:
- host: example.com
http:
paths:
- path: /socket.io
pathType: Prefix
backend:
service:
name: socketio-service
port:
number: 8001
- path: /
pathType: Prefix
backend:
service:
name: fastapi-service
port:
number: 8000
Код: Выделить всё
apiVersion: apps/v1
kind: Deployment
metadata:
name: socketio
namespace: duck-backend
spec:
replicas: 1
selector:
matchLabels:
app: socketio
template:
metadata:
labels:
app: socketio
spec:
containers:
- name: socketio
image: duck-backend:latest
command: ["./docker/entrypoint-k8s.sh", "socket-io"]
ports:
- containerPort: 8001
envFrom:
- configMapRef:
name: duck-backend-config
- secretRef:
name: duck-backend-secrets
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "1000m"
---
apiVersion: v1
kind: Service
metadata:
name: socketio-service
namespace: duck-backend
spec:
selector:
app: socketio
ports:
- port: 8001
targetPort: 8001
type: ClusterIP
Код: Выделить всё
app = FastAPI(title="Socket.IO Server")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
sio = socketio.AsyncServer(
async_mode='asgi',
cors_allowed_origins='*',
client_manager=manager,
logger=True,
engineio_logger=True
)
@sio.on('*')
def any_event(event, sid, data):
print('*', event, sid)
@sio.event
def connect(sid, environ, auth):
print('connect ', sid)
@sio.event
def disconnect(sid, reason):
print('disconnect ', sid, reason)
uvicorn.run(socketio.ASGIApp(sio, app), host="0.0.0.0", port=8001)
Код: Выделить всё
Starting service: socket-io
Starting Socket.IO service on port 8001...
Server initialized for asgi.
2025-09-19 16:20:48,983 - app.api.v1.socket_events.balance_update - INFO - Starting Socket.IO server...
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
2025-09-19 16:21:25,682 - engineio.server - INFO - TQFnIo5NlfhS4P9bAAAA: Sending packet OPEN data {'sid': 'TQFnIo5NlfhS4P9bAAAA', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000, 'maxPayload': 1000000}
TQFnIo5NlfhS4P9bAAAA: Sending packet OPEN data {'sid': 'TQFnIo5NlfhS4P9bAAAA', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000, 'maxPayload': 1000000}
client.html
Код: Выделить всё
Socket.IO Test Client
Socket.IO Test
Connecting...
// Replace with your actual endpoint and port
const socket = io("https://example.com", {
path: "/socket.io/",
transports: ['websocket', 'polling'],
secure: true
});
socket.on("connect", () => {
document.getElementById("status").innerText = "Connected: " + socket.id;
});
socket.on("disconnect", () => {
document.getElementById("status").innerText = "Disconnected";
});
// Example: Listen for custom events
socket.on("your_event", (data) => {
console.log("Received:", data);
});
// Example: Emit a test event
socket.emit("test", { msg: "Hello from client!" });
Мобильная версия