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


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

主题:如何实现 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 [显示全部帖子]

自顶

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
252476276
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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.

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


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





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


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


图片点击可在新窗口打开查看此主题相关图片如下:1665107024644.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2022/10/7 13:15:00 [显示全部帖子]

客户端(js文件): var source = new EventSource("timerDLGL");

source.onopen = function() {
console.log("连接服务器");
};

source.onmessage = function(event) {
console.log("服务器返回:");
console.log(event);
    document.getElementById("count").innerHTML += event.data + "<br>";
};

source.onerror = function(event){
console.log("错误信息:");
console.log(event);

console.log(event.readyState);
};


服务器端内部函数timerDLGL

Dim e As RequestEventArgs = Args(0)

Functions.Execute("showMsg2Form1", "进入")

e.response.AddHeader("Content-Type" , "text/event-stream")
e.response.AddHeader("Cache-Control", "no-cache")
e.response.AddHeader("Connection",  "keep-alive")
e.response.AddHeader("Access-Control-Allow-Origin",  "*")

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.Handled = True '通知系统异步函数执行完毕,可以关闭信道

Functions.Execute("showMsg2Form1","完成")


网络监视器:
Select Case e.Path
        Case "luckysheetLoadUrl"
            ' luckysheet初始化的loadURL配置参数
            e.AsyncExecute = True
            Functions.AsyncExecute("luckysheetLoadUrl",e)
        Case "timerDLGL"   ' 轮询
            e.AsyncExecute = True
            Functions.AsyncExecute("timerDLGL",e)  

页面控制台输出信息:



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


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2022/10/7 13:16:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:1665119626575.png
图片点击可在新窗口打开查看



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


加好友 发短信
等级:婴狐 帖子:38 积分:407 威望:0 精华:0 注册:2022/9/13 10:03:00
  发帖心情 Post By:2022/10/7 14:03:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:1665122516772.png
图片点击可在新窗口打开查看

客户端可以接受服务器端数据, 但是接受到的是乱码,应该如何处理?

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