使用 Kubernetes 部署并通过 Ingress 连接后 SSE 损坏

我有一个使用 EventStream 的 ReactJS 客户端和一个实现 SSE 的 golang 后端。

当我将浏览器连接到在 localhost 上运行的后端时,以及当我的后端在带有端口转发的 k8s 上运行时,一切似乎都正常。

一旦我使用主机名创建入口(这样我就不必一直进行端口转发),SSE 就停止工作。我仍然看到客户端发送请求,并且该请求被后端接收并注册。但是,当发送事件时,它永远不会到达我的 ReactJS 应用程序。

在我的 ReactJS 应用程序中:


export default class CustomersTable extends Component {

  constructor(props) {

    super(props)

    this.eventSource = new EventSource('/v1/events')

  }


  updateCustomerState(e) {

    let event = JSON.parse(e.data)

    switch (event.event_type) {

      case 'customerStateUpdate':

        let newData = this.state.customers.map(item => {

          if (item.name === event.customer_name) {

            item.k8sState = event.customer_state

          }

          return item

        })

        this.setState(Object.assign({}, { customers: newData }))

        break

      case 'contentUpdate':

        this.reload()

        break

      default:

        break

    }

  }


  componentDidMount() {

    this.setState({ isLoading: true })

    ReactModal.setAppElement('body')

    this.reload()

    this.eventSource.onmessage = e => this.updateCustomerState(e)

  }


  componentWillUnmount() {

    this.eventSource.close()

  }

...


UYOU
浏览 277回答 1
1回答

慕标5832272

我在 Nginx Ingress 上使用了我的 SSE 应用程序:   annotations:     nginx.ingress.kubernetes.io/proxy-read-timeout: "21600"     nginx.ingress.kubernetes.io/eventsource: "true"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go