清除 javascript Websocket 上的缓冲区
Posted
技术标签:
【中文标题】清除 javascript Websocket 上的缓冲区【英文标题】:Clear buffer on javascript's Websocket 【发布时间】:2013-05-28 05:06:40 【问题描述】:我正在尝试编写 javacript 以使用 Websocket 接收 mjpeg。 客户端可以选择播放的视频文件。
服务器正在使用 json 将 mjpeg 作为图像一一发送,如下所示: "image":"base64_image"
当客户端尝试选择不同的视频时会出现问题。 更改为新的视频文件需要 2 分钟以上。 (虽然服务器和客户端在不同的国家。)
我知道有延迟,但事实是
我打开上一个视频文件的时间越长,下一个视频文件的显示速度就越慢。
我猜缓冲区中有数据排队。所以,我的问题是
如何在 javascript 中清除该套接字缓冲区?
或者如果不是关于缓冲区,你知道问题是什么吗?
【问题讨论】:
【参考方案1】:如果没有任何示例代码,问题很可能是您的 websocket 客户端被来自服务器的消防水管淹没了。
您很可能可以通过让 websocket 客户端在准备好处理下一帧时轮询下一帧来对此进行调整。这样做的好处是您可以停止轮询资产 X 的帧并开始轮询资产 Y 的帧。
这当然假设问题是客户端......如果它在您的服务器上加载整个视频等并且不能“放开”视频切换到另一个,那么这是不同的服务器上的问题。
也就是说,这对于 websocket 来说不是一个很好的用例……它们非常适合小数据包……这只是一个实验吗?
【讨论】:
来回发送会更慢,延迟加倍。现在,我正在尝试使用来自服务器的 opencv 进行图像处理并将处理后的图像发送到客户端。你有什么建议除了 websocket 来配合这个工作吗? @A-letubby - 我目前运行一个 websocket (ws) 应用程序,它在 ws 上使用这种“轮询”机制,我想如果你做了一个简单的测试,你会发现“ACK”或来自客户端的“POLL”消息在 ws 上非常快,因为连接已经打开。如果您通过标准 HTTP 进行轮询,那么它会很慢,因为您要打开和关闭很多连接。一般来说 ws 不太适合发送大图像/数据包,最好重新设想这一点并将文件的 URL 发送到 ws 并让浏览器通过正常通道加载图像。 (XHR) @NickSharp 嗨,我正在使用 OpenCV 和 Web-Sockets 做类似的事情。您是否获得了关于如何清除或设置缓冲区空间的解决方案? @AndrewSimpson - 我不确定是否真的有缓冲空间。我的建议仍然是实施一些轮询,即使只是每 100 帧向服务器发送“仍在侦听”。在 OP 的情况下,他似乎只是在淹没自己。 @AndrewSimpson - 此外,Websockets 并不是最好的资产。如果有任何东西保持关于通信的套接字,并使用更传统的 HTTP GET 来拉取原始资产或处理过的文件。以上是关于清除 javascript Websocket 上的缓冲区的主要内容,如果未能解决你的问题,请参考以下文章
Javascript - 在 Websocket 上使用承诺?
Flutter - 导航回主页并清除 websocket 连接 - popUntil
如何确保清除 ktor websocket 客户端创建的所有 Kotlin 协程?
如何在实时 Firebase 数据库上侦听以通过后端 laravel 和 websocket 动态获取数据,而不使用 javascript