以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何实现 Server-Sent 事件允许网页从服务器获得更新  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=180190)

--  作者:252476276
--  发布时间:2022/10/6 8:05:00
--  如何实现 Server-Sent 事件允许网页从服务器获得更新
请教下 ,如何用 foxtable 实现 Server-Sent 事件允许网页从服务器获得更新

并且无内存泄漏情况

--  作者:252476276
--  发布时间:2022/10/6 10:05:00
--  
自顶
--  作者:有点蓝
--  发布时间:2022/10/6 10:12:00
--  
没玩过,网上搜索吧:https://www.baidu.com/baidu?ie=UTF-8&word=Server-Sent

Foxtable估计做不了


--  作者:有点蓝
--  发布时间: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
--  发布时间:2022/10/6 11:11:00
--  
代码编辑器中 response.addHeader   打.按tab没有精灵提示
--  作者:有点蓝
--  发布时间:2022/10/6 11:13:00
--  
升级到新版编辑器才会有这个提示
--  作者:252476276
--  发布时间: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
--  发布时间: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.

--  作者:有点蓝
--  发布时间: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
--  发布时间:2022/10/7 9:50:00
--