首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WebSocket握手中的错误:意外响应代码: 502

WebSocket握手中的错误:意外响应代码: 502
EN

Stack Overflow用户
提问于 2020-04-18 14:29:16
回答 1查看 1.2K关注 0票数 1

试图创建一个简单的websocket服务器上的迷你库贝与入口。连接ws://192.168.99.119/获取以下错误。

WebSocket连接到'ws://192.168.99.119/‘失败: WebSocket握手时出错:意外响应代码: 502

请帮我解决这个问题。下文提供了实施的详细情况。

Websocket服务器实现

代码语言:javascript
运行
复制
import * as express from 'express';
import * as http from 'http';
import * as WebSocket from 'ws';

interface ExtWebSocket extends WebSocket {
    id: string; // your custom property
    isAlive: boolean
}
const PORT = parseInt(process.env.NODE_PORT) || 8010;

const app = express();

//initialize a simple http server
const server = http.createServer(app);

//initialize the WebSocket server instance
const wss = new WebSocket.Server({ server });

wss.on('connection', (ws: ExtWebSocket) => {

    //connection is up, let's add a simple simple event
    ws.on('message', (message: string) => {

        //log the received message and send it back to the client
        console.log('received: %s', message);

        const broadcastRegex = /^broadcast\:/;

        ws.isAlive = true;

        ws.on('pong', () => {
            ws.isAlive = true;
        });

        if (broadcastRegex.test(message)) {
            message = message.replace(broadcastRegex, '');

            //send back the message to the other clients
            wss.clients
                .forEach(client => {
                    if (client != ws) {
                        client.send(`Hello, broadcast message -> ${message}`);
                    }
                });

        } else {
            ws.send(`Hello, you sent -> ${message}`);
        }
    });

    //send immediatly a feedback to the incoming connection
    ws.send('Hi there, I am a WebSocket server');
});

setInterval(() => {
    wss.clients.forEach((ws: ExtWebSocket) => {

        if (!ws.isAlive) return ws.terminate();

        ws.isAlive = false;
        ws.ping(null, false);
    });
}, 10000);

//start our server
server.listen(PORT, () => {
    console.log(`Server started on port ${JSON.stringify(server.address())}`);
});

文档

代码语言:javascript
运行
复制
FROM node:alpine
WORKDIR /app
COPY package*.json /app/
RUN npm install

COPY ./ /app/
RUN npm run build

CMD ["node","./dist/server.js"]

EXPOSE 8010

Websocket服务yaml

代码语言:javascript
运行
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: socketserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: socketserver
  template:
    metadata:
      labels:
        app: socketserver
    spec:
      containers:
      - name: socketserver
        image: kireeti123/socketserver:1.0.2
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 8010
          name: wsport
---
apiVersion: v1
kind: Service
metadata:
  name: socketserver-svc
spec:
  selector:
    app: socketserver
  ports:
  - port: 8010
    targetPort: 80
---

Ingress.yaml

代码语言:javascript
运行
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/websocket-services: socketserver-svc
    nginx.org/websocket-services: socketserver-svc
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: socketserver-svc
          servicePort: 80
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-20 11:53:26

为什么targetPort设置为80,而Pod公开了端口8010?恐怕行不通。

Service定义中切换端口号,如下面的示例所示:

代码语言:javascript
运行
复制
apiVersion: v1
kind: Service
metadata:
  name: socketserver-svc
spec:
  selector:
    app: socketserver
  ports:
  - port: 80
    targetPort: 8010

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61290795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档