--- frontend-ws-connection.ts --- ingress-service.yaml --- server-cluster-ip-service.yaml --- server-deployment.yaml --- server.js
export const ws = webSocket<WebsocketMessage>(`wss://${location.hostname}:${location.protocol === 'https:' ? 443 : 80}/ws/`); export const wsObserver = ws .pipe( retryWhen(errors => errors.pipe( delay(1000) ) ) ); wsObserver.subscribe(console.log);
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-service namespace: <YOUR_NAMESPACE> annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/proxy-read-timeout: 3600 nginx.ingress.kubernetes.io/proxy-send-timeout: 3600 spec: rules: - http: paths: - path: / backend: serviceName: client-cluster-ip-service servicePort: 3000 # Below is the important part! - path: /ws/ backend: serviceName: server-cluster-ip-service servicePort: 40510
apiVersion: v1 kind: Service metadata: name: server-cluster-ip-service namespace: <YOUR_NAMESPACE> spec: type: ClusterIP selector: component: server ports: - port: 40510 targetPort: 40510 # The below line isn't required. protocol: TCP
apiVersion: apps/v1 kind: Deployment metadata: name: server-deployment namespace: <YOUR_NAMESPACE> spec: replicas: 1 selector: matchLabels: component: server template: metadata: labels: component: server spec: containers: - name: server image: <YOUR_DOCKER_IMAGE> ports: - containerPort: 40510
import { Server as WebSocketServer } from 'ws'; // IMPORTANT: not a secure connection const wss = new WebSocketServer({ path: '/ws/', port: 40510, }); wss.on('connection', function (ws) { console.log('connection!'); }); wss.on('close', function close() { console.log('ws disconnected'); });