以文本方式查看主题 - 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 函数 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 -- |