Golang中如何用Request.Context替换http.CloseNotifier实现Server Sent Event

Golang中如何用Request.Context替换http.CloseNotifier实现Server Sent Event 亲爱的Gophers们,

我已经实现了一个服务器发送事件代理,它依赖于http.CloseNotifier CloseNotify来关闭连接。但这个方法已被弃用!

我试图弄清楚如何使用Request.Context而不是http.CloseNotifier来实现断开连接

使用CloseNotifier的代码,在收到通知时直接返回:

// Listen to connection close and un-register messageChan
notify := w.(http.CloseNotifier).CloseNotify()
for {
   select {
      case <-notify:
	 return
    default:
       // On message
       commands := <-messageChan

我能否简单地用Done通道替换notify通道?

done := r.Context().Done()
for {
   select {
      case <-done:
         return
      default:
        ...

我是Go语言的新手,不太确定是否完全理解"http.context"的概念。

来自法国南部的诚挚问候


更多关于Golang中如何用Request.Context替换http.CloseNotifier实现Server Sent Event的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

感谢,这个信息对我也很重要。我原本就怀疑是这样,但不太确定。这就是为什么我之前没有发表任何意见。

更多关于Golang中如何用Request.Context替换http.CloseNotifier实现Server Sent Event的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好Kamil,

我有一个可用的服务器发送事件代理实现。

我的问题(可能比较幼稚)是:

能否简单地用Done通道替换notify通道?

Benoit

连接断开 - 禁用网卡

或者

禁用应用程序 - 禁用连接

能否捕获这些事件?

嗯,我认为问题在于 - 在客户端禁用网卡…

因为在Linux上的服务器不会断开连接。 ?

我一直在观看Fransec Campoy关于Context的《Just For Func》系列节目。

JustForFunc #9
JustForFunc #10

现在情况很清楚了!
我可以用r.Context().Done()通道来替换w.(http.CloseNotifier).CloseNotify()通道。

此致。

回到顶部