将标准输出流直播到网页上
2014-4-24 12:31:40
收藏:0
阅读:59
评论:1
看起来这应该是一个很简单的事情,但不幸的是,Web开发从来不是我的强项。
我有一堆脚本,我想从网页上启动它们,并在页面上查看实时的stdout文本。其中一些脚本运行时间很长,因此正常的单个响应不够好(我已经实现了这一点)。
我所能看到的选择是:
将stdout输出到文件中,并定期(每几秒钟一次)从客户端发送请求,并用此文件的内容做出响应。
分块HTTP响应?我不确定它们是用来干什么的——我已经尝试过实现了,但我认为我可能误解了它们的目的。
Websockets(我正在使用Luvit服务器,所以这不是一个选项)。
……还有其他吗?
我相信一定有一种标准的实现方式,我经常看到其他网站在做这个。例如Teamcity。或聊天室(原始TCP套接字?)。
如果有任何正确方向的指针,将不胜感激。如果最简单的方法是从客户端发送大量的定时请求,那就这样。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
这让我很想起通用网关接口(Common Gateway Interfaces)。
你的想法听起来都是正确的方向。由于你正在使用一个 shell 脚本,而且需要与 Web 服务器进行一些潜在的非平凡交互,我觉得指出寻找这种代码示例的地方可能是有意义的,这种方式在很久以前非常常见,而且很容易出错。
实际上,你的脚本是一个 CGI 脚本,执行着典型的任务。
在互联网早期的日子里,这是实现不是静态 HTML 文件的网页的“正常方式”。网页基本上是一个 shell 脚本(或任何从 stdin 读取并写入 stdout 的程序)实现的。
你正在做/提出的部分非常相似,我认为从旧的 CGI 代码中可以学到很有用的经验。
例如,正确处理从脚本内部通过 stdout 和通过 Web 服务器进入客户端页面的缓冲区可能会很棘手。因此,挖掘旧的示例可能会有很大帮助。
(很多东西对于你,即原始帖子的发帖者,可能都是很明显的,所以把“你”看作潜在读者。)
一般来说,棘手之处是缓冲区,我期望如此。如果你习惯于显式地处理不支持它的程序的 stdin/out 缓冲区,那么你应该能够想象到可能会发生的事情——但是如果不习惯:我记得 CGI 更糟糕,因为你还必须同步 HTTP 服务器的缓冲区(让我们希望它会自动处理)——因此也许要尽早询问问题/寻找示例。
CGI 方式将是你现在所实现的方式——如果缓冲区正确,那肯定是尽可能实时的。但是我理解你遇到了超时问题,是因为运行时间太长了吗?或者你的运行时间强烈变化?
为了让它尽可能的实时,没有什么比写 stdout 到 http 流更好的了。(我假设我们接受经过 HTTP 服务器的开销。)此外,我在考虑行缓冲,所以不是每个字符都刷新——这对用例来说足够了吗?(即没有动画进度指示器行/ ANSI 转义,你希望实时看到的)
然后也许最好的是解决超时等问题,但保持这个概念。如果实时性不是那么重要,其他方法在很多方面可能更好,当然任何可扩展性的方法都可能需要其他方法。