Foxtable(狐表)用户栏目专家坐堂 → 如何实现 Server-Sent 事件允许网页从服务器获得更新


  共有7340人关注过本帖树形打印复制链接

主题:如何实现 Server-Sent 事件允许网页从服务器获得更新

帅哥哟,离线,有人找我吗?
252476276
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
如何实现 Server-Sent 事件允许网页从服务器获得更新  发帖心情 Post By:2022/10/6 8:05:00 [只看该作者]

请教下 ,如何用 foxtable 实现 Server-Sent 事件允许网页从服务器获得更新

并且无内存泄漏情况

 回到顶部
帅哥哟,离线,有人找我吗?
252476276
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2022/10/6 10:05:00 [只看该作者]

自顶

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/10/6 10:12:00 [只看该作者]

没玩过,网上搜索吧:https://www.baidu.com/baidu?ie=UTF-8&word=Server-Sent

Foxtable估计做不了


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/10/6 10:24:00 [只看该作者]

试试

将HttpRequest事件代码改为:

Select Case e.Path
    Case "list.htm"
        
e.AsyncExecute = True  
'
通知系统,将采用异步方式生成网页
        Functions.AsyncExecute("xx函数", e) 
'
异步调用函数生成网页
End
 Select


函数

Dim e As RequestEventArgs = args(0)

e.Response.AddHeader("Content-Type", "text/event-stream")

e.Response.AddHeader("Cache-Control", ........

……

Do While(True)

    If 符合某个条件 Then 

    Dim postData As Byte() = Encoding.Default.GetBytes("data:需要发送的内容\n\n")

    Dim reqStream As System.IO.Stream = e.Response.OutputStream

    reqStream.Write(postData, 0, postData.Length)

    reqStream.Flush()

    Else

        Exit Do

    End If

Loop 

e.WriteString("data:发送完毕\n\n")

e.Handled = True '通    知系统异步函数执行完毕,可以关闭信道


 回到顶部
帅哥哟,离线,有人找我吗?
252476276
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2022/10/6 11:11:00 [只看该作者]

代码编辑器中 response.addHeader   打.按tab没有精灵提示

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/10/6 11:13:00 [只看该作者]

升级到新版编辑器才会有这个提示

 回到顶部
帅哥哟,离线,有人找我吗?
252476276
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2022/10/6 15:59:00 [只看该作者]

客户端代码:

var source = new EventSource("timerDLGL");
source.onmessage = function(event) {
console.log("服务器返回:");
console.log(event);
    document.getElementById("count").innerHTML += event.data + "<br>";
};
服务器端:
     网络监视器的httpRequest事件:
     Case "timerDLGL"   ' 登轮管理轮询
            e.AsyncExecute = True
            Functions.AsyncExecute("timerDLGL",e)    

    内部函数:timerDLGL

 Dim e As RequestEventArgs = Args(0) 
 Functions.Execute("showMsg2Form1","进入")
 e.response.AddHeader("Content-Type" , "text/event-stream") 
 e.response.AddHeader("Cache-Control", "-1") 
 Functions.Execute("showMsg2Form1","执行")
 Dim postData As Byte() = Encoding.Default.GetBytes("data:需要发送的内容\n\n") 
 Dim reqStream As System.IO.Stream = e.Response.OutputStream 
 reqStream.Write(postData, 0, postData.Length) 
 reqStream.Flush() 
 e.WriteString("data:发送完毕\n\n") 
 e.Handled = True '通 知系统异步函数执行完毕,可以关闭信道
 Functions.Execute("showMsg2Form1","完成") 
 Sleep(1000)

客户端调用后, 进入了服务器端, 没有使用do while loop 循环,  内部函数:"timerDLGL",也在不断的调用

Functions.Execute("showMsg2Form1","进入") 这是在服务器的界面上显示进度

服务器上显示内容(循环显示):

传入e.Path : timerDLGL

进入

执行

完成

传入e.Path : timerDLGL

进入

执行

完成

传入e.Path : timerDLGL

进入

执行

完成



客户端,没有进入


 回到顶部
帅哥哟,离线,有人找我吗?
252476276
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2022/10/6 16:03:00 [只看该作者]

如果把  Dim postData As Byte() = Encoding.Default.GetBytes("data:需要发送的内容\n\n") 
 Dim reqStream As System.IO.Stream = e.Response.OutputStream 
 reqStream.Write(postData, 0, postData.Length) 
 reqStream.Flush() 
这些代码屏蔽,

网页按F12,控制台输入以下信息:
EventSource's response has a MIME type ("text/html") that is not "text/event-stream". Aborting the connection.

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/10/7 9:42:00 [只看该作者]

1、

e.Response.AddHeader("Content-Type", "text/event-stream")

e.Response.AddHeader("Cache-Control", ........

……这里还有其它头部内容,参考网上搜索的用法补充完整

2、
不要do循环就去掉下面代码
e.WriteString("data:发送完毕\n\n") 

 回到顶部
帅哥哟,离线,有人找我吗?
252476276
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2022/10/7 9:50:00 [只看该作者]





 回到顶部
总数 16 1 2 下一页