天道酬勤,学无止境

Rails 流式传输不是流式传输(Rails Streaming not Streaming)

问题

我正在努力向我的 rails 应用程序添加一个流组件,因为我想开始使用 SSE。 我曾尝试在一个较小的示例中使用它,但仍然遇到问题。 实际上,我一直无法让 Rails 正确地流式传输对 curl 请求的响应。 我正在关注 http://tenderlovemaking.com/2012/07/30/is-it-live.html 上的教程。 我不确定是否需要为 OSX 配置某些东西,或者我的配置中是否缺少某些东西。 任何帮助将不胜感激。

我在 OSX 上本地运行它。 当我运行curl -i localhost:3000我得到以下响应:

HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
Content-Type: text/event-stream
Last-Modified: Wed Apr 23 23:10:15 2014
Cache-Control: no-cache
Set-Cookie: request_method=GET; path=/
X-Request-Id: 89f2af3e-76e9-4873-85b0-3b6fe45f6343
X-Runtime: 0.001724
Transfer-Encoding: chunked

hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world

问题是我一次得到了它,而不是像预期的那样得到一些响应。 如果我需要提供更多信息,请告诉我

我的代码如下:

stream_test_controller.rb

class StreamTestController < ActionController::Base
  include ActionController::Live

  def index
    response.headers['Content-Type'] = 'text/event-stream'
    10.times {
      logger.info "hello world sent"
      response.stream.write "hello world\n"
      sleep 1
    }
    response.stream.close
  end
end

文件

source 'https://rubygems.org'  
ruby '2.1.0'

gem 'rails', '4.0.3'
gem 'sqlite3'
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'
gem 'puma'

group :doc do
  gem 'sdoc', require: false
end

发展.rb

StreamTest::Application.configure do

  config.preload_frameworks = true
  config.allow_concurrency = true
  # Settings specified here will take precedence over those in config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development    
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = true

  # Do not eager load code on boot.
  config.eager_load = true

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true
end
回答1

从这里的文档来看,您是否使用 WEBrick 进行测试?

WEBrick 服务器缓冲所有响应,因此包括 ActionController::Live 将不起作用。 您必须使用不会自动缓冲响应的 Web 服务器。

回答2

尝试在 curl 命令中禁用缓冲。 从联机帮助页:

-N, --no-buffer

禁用输出流的缓冲。 在正常工作情况下,curl 将使用标准的缓冲输出流,其效果是它将以块的形式输出数据,而不一定是数据到达的确切时间。 使用此选项将禁用该缓冲。

回答3

SSE 消息由两个换行符(链接)分隔。

你的代码应该有:

response.stream.write "hello world\n\n"

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Ruby on Rails 3:通过Rails将数据流传输到客户端(Ruby on Rails 3: Streaming data through Rails to client)
    问题 我正在研究与RackSpace云文件(类似于Amazon S3,但缺少一些功能)进行通信的Ruby on Rails应用程序。 由于缺乏按对象访问权限和查询字符串身份验证的可用性,必须通过应用程序来介导对用户的下载。 在Rails 2.3中,看起来您可以动态构建一个响应,如下所示: # Streams about 180 MB of generated data to the browser. render :text => proc { |response, output| 10_000_000.times do |i| output.write("This is line #{i}\n") end } (来自http://api.rubyonrails.org/classes/ActionController/Base.html#M000464) 而不是10_000_000.times...我可以在其中转储我的cloudfiles流生成代码。 麻烦的是,这是我在Rails 3中尝试使用此技术时得到的输出。 #<Proc:0x000000010989a6e8@/Users/jderiksen/lt/lt-uber/site/app/controllers/prospect_uploads_controller.rb:75> 看起来proc对象的call方法可能没有被调用?
  • 抱歉,此视频不适用于在Http Streaming Android中流式传输到此设备(Sorry, this video is not valid for streaming to this device in Http streaming android)
    问题 我可以成功地从URL(服务器)流式传输一些视频, 但是其他人(我的视频到我的服务器)不是。 您可以在我的代码中看到两者(正在工作/不工作),但我对此问题感到困惑。 “很抱歉,此视频不适用于流式传输到此设备” 如下代码: String url = null; // url = "rtsp://v5.cache5.c.youtube.com/CiILENy73wIaGQmC00ZlwwIDOxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp"; // Working // url = "http://daily3gp.com/vids/747.3gp"; // Working url = "http://www.ooklnet.com/files/381/381489/video.mp4"; // Working // url = "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov"; // Working // url = "http://dl.dropbox.com/u/80419/santa.mp4"; // Working // url = "http://trekvn.hostoi.com/encode_normal.mp4"; // Not Working // url = "http
  • HTML5视频无法流式传输并且需要90秒的加载时间(HTML5 video not streaming and taking 90 seconds to load)
    问题 我有一个HTML5视频播放器: <video width="800" height="475" id ="video" controls="" src="" autoplay></video> 在开发人员中,这似乎可以100%地起作用,但是在生产视频中,加载视频可能需要90秒的时间。 我想弄清楚html5播放器是否真的是流式播放器,或者它首先需要完整下载吗? 一位同事通知我,设置标签的方法如下: <video width="800" height="475" id ="video" controls="" src="" preload="none" autoplay></video> 如果preload选项设置为none或元数据,则应强制浏览器流式传输视频,而不是缓冲整个内容。 我在这里有什么选择? 我应该放弃html5播放器吗? 我的印象是html5播放器是在我们的Intranet上进行流视频处理的正确方法。 有什么建议么? 回答1 由于您必须通过公共互联网(而不是本地网络)移动文件,因此您需要使用ffmpeg之类的工具将元数据(MOOV原子)移动到视频文件的开头,以便可以更快地开始流式传输 ./ffmpeg -y -i SourceFile.mp4 -s 1280x720 -c:v libx264 -b 3M -strict -2 -movflags faststart
  • 直接流式传输到数据库(Streaming directly to a database)
    问题 我正在使用c#,并且有一个打开的tcpip连接来接收数据。 是否可以在接收流时将流保存到ms sql服务器数据库中,而不是接收所有数据然后全部保存呢? 如果可以在接收流时将其发送到数据库,则不必将整个数据块保留在内存中。 这是可能吗? 回答1 您是以BLOB的形式写入数据库,还是以某种形式转换数据,然后为每一行执行插入操作? 您在评论中的回答使我感到困惑。 将数据流写入BLOB列与获取数据然后将其转换为单独行的插入有很大的不同。 无论如何,通过首先使用需要插入的blob列创建行,然后反复调用update语句,可以将数据流传输到BLOB列: update myTable set myColumn.Write(@data, @offset, @length) where someid = @someId 用于流中的字节块。 完美的例子在这里。 回答2 SQL Server 2005支持HTTP端点(不需要IIS),因此一种解决方案是在SQL Server上创建一个Web服务以直接接收流式数据。 这些链接说明了设置方法:http://codebetter.com/blogs/raymond.lewallen/archive/2005/06/23/65089.aspx http://msdn.microsoft.com/en-us/library/ms345123。 aspx 回答3
  • 从Android Media Recorder流式传输后修复3GP文件(Fix 3GP file after streaming from Android Media Recorder)
    问题 我正在尝试通过本地unix套接字从android摄像机流式传输视频并将流中的文件写入sdcard。 一切正常,除了文件不能在任何播放器上播放。 这是因为Android无法填补文件中的一些空白,因为套接字是无法找到的。 据我了解,视频流结束后,我需要进行一些修改。 我在这里和这里读过几篇文章,但没有一篇对我有帮助。 我正在与十六进制编辑器一起玩,以学习如何手动进行操作,因此之后在Android代码中进行相同的操作将变得很简单。 这是从流中保存的示例文件:https://dl.dropbox.com/u/17510473/sample_not_playable.3gp 任何人都可以修复以使其可播放并告诉他如何操作吗? 编辑:我擦除3gp文件的标头,并编写新的标头,如下所示: 00 00 00 18 66 74 79 70 33 67 70 34 00 00 03 00 33 67 70 34 33 67 70 36 00 00 00 00 然后,使用以下命令找到mdat和moov原子的起始位置: grep -aobE "ftyp|mdat|moov" sample_not_playable.3gp 它给了我以下输出: 4:ftyp 28:mdat 1414676:moov 然后制作1414676 - 28 = 1,414,648 = 0x1595F8
  • 通过 LocalSocket 从 MediaRecorder 流式传输视频(Streaming video from MediaRecorder through LocalSocket)
    问题 我正在尝试通过本地套接字从 Android 的 MediaRecorder 发送 h264/AAC 视频。 目标是通过 RTMP 或 RTSP 将视频发送到 WOWZA 服务器,但这给我带来了很多麻烦,现在我只是尝试将数据从 LocalServerSocket 写入文件。 这是一些代码。 对不起,它不是很干净,但我花了几个小时测试很多东西,我的项目现在一团糟。 在相机活动中,输出文件设置: LocalSocket outSocket = new LocalSocket(); try { outSocket.connect(new LocalSocketAddress(LOCAL_SOCKET)); } catch (Exception e) { Log.i(LOG_TAG, "Error connecting socket: "+e); } mMediaRecorder.setOutputFile(outSocket.getFileDescriptor()); LocalServerSocket 实现: try { mLocalServerSocket = new LocalServerSocket(mName); } catch (Exception e) { Log.e(LOG_TAG, "Error creating server socket: "+e)
  • 从iPhone流式传输视频(streaming video FROM an iPhone)
    问题 我可以从iPhone的摄像头中获得单个相框。 我需要的是一种将它们与声音打包在一起以流式传输到服务器的方法。 我收到文件后立即发送它们并不是什么大问题。 这是我遇到问题的流式传输文件的生成。 我一直在尝试让FFMpeg正常工作。 有人对我如何实现这一目标有任何想法吗? 我想要一个已知的有效API或有关如何使FFMpeg在iPhone应用程序中正确编译的说明。 回答1 您可以将录音分割成长度为10秒的单独文件,然后分别发送。 如果使用AVCaptureSession的beginConfiguration和commitConfiguration方法批处理输出更改,则不应在文件之间放置任何帧。 与逐帧上传相比,这具有许多优势: 这些文件可以直接用于HTTP实时流传输,而无需任何服务器端处理。 如果连接速度足够快,则数据传输之间的间隔可使天线在两个天线之间处于休眠状态,从而节省电池寿命。 相反,如果连接速度较慢,因此上载的速度比录制的速度慢,则管理一组文件的延迟上载比字节流要容易得多。
  • 使用NSInputStream流式传输NSXMLParser(Streaming NSXMLParser with NSInputStream)
    问题 更新: 当使用NSXMLParser类方法initWithContentsOfURL ,而不是在下载XML feed时进行解析,它似乎试图将整个XML文件加载到内存中,然后才启动解析过程。 如果XML提要很大(使用过多的RAM,本质上效率低下,因为不是与下载并行解析,而是仅在下载完成后才开始解析等),所以这是有问题的。 有人发现使用NSXMLParser将提要流式传输到设备时如何解析吗? 是的,您可以使用LibXML2 (如下所述),但是似乎应该可以使用NSXMLParser做到这一点。 但这使我难以理解。 原始问题: 我在努力使用NSXMLParser从Web流中读取XML。 如果您使用initWithContentsOfURL,虽然该接口可能会导致人们推断它将从Web流式传输XML,但似乎并没有这样做,而是似乎在尝试进行任何解析之前先尝试加载整个XML文件。 。 对于适当大小的XML文件而言,这很好,但是对于很大的XML文件而言,这是有问题的。 我已经看到了有关将NSXMLParser与initWithStream结合使用以及从网络流式传输的一些自定义NSInputStream讨论。 例如,对此有答案,建议使用类似以下Cocoa Builder帖子中提到的CFStreamCreateBoundPair之类的内容以及《 Apple Stream编程指南
  • BigQuery流式传输插入数据可用性延迟(BigQuery streaming insert data availability delay)
    问题 我已经使用BigQuery大约2个月了。 在这段时间里,我使用流式插入每分钟添加数千个条目。 我已经能够在几分钟之内查询该数据,即使不是立即就能查询到。 但是从几天前开始,我的一张桌子突然开始显示数据可用性的延迟,范围从20到60分钟不等。 这仅在我的一张桌子上发生。 插入到其他表中的数据几乎保持立即可用。 对于BigQuery,这种数据可用性延迟是否正常? 遇到此问题的表是accuAudience.trackPlays 。 我很乐意向Google团队成员提供项目ID和其他信息。 流插入问题表的结果是: {'kind':'bigquery#tableDataInsertAllResponse'} 有问题的表accuAudience.trackPlays示例查询(按日期desc排序): 行日期计数 1 2015-03-30 12:35:32 UTC 67 2 2015-03-30 12:35:31 UTC 65 3 2015-03-30 12:35:30 UTC 56 4 2015-03-30 12:35:29 UTC 45 5 2015-03-30 12:35:28 UTC 60 几秒钟后,同一查询对另一个表( accuAudience.trackSkips )进行了查询。 请注意,日期字段比先前的查询早30分钟。 行日期计数 1 2015-03-30 13:04:03
  • 仅使用视频标签实时流式传输到 HTML5(没有 webrtc)(Real Time Streaming to HTML5 (with out webrtc) just using video tag)
    问题 我想将实时编码数据包装到 webm 或 ogv 并将其发送到 html5 浏览器。 webm 或 ogv 可以做到这一点,Mp4 不能做到这一点,因为它的 MDAT 原子。 (不能实时打包 h264 和 mp3 并将其打包并发送给客户端)假设我正在从我的网络摄像头和内置麦克风中输入音频。 碎片化的 mp4 可以处理这个问题,但是找到库来做到这一点很麻烦)。 我需要这样做,因为我不想分开发送音频和视频。 如果我确实单独发送它,通过音频标签发送音频和通过视频发送视频>(音频和视频被解复用并发送)我可以使用 javascript 在客户端浏览器上同步它们吗? 我看到了一些例子,但还不确定。 回答1 宇宙, 由于您最初问过这个问题,因此媒体源扩展 https://www.w3.org/TR/media-source/ 已经足够成熟,可以播放非常短(30 毫秒)的 ISO-BMFF 视频/mp4 片段,只需有点缓冲。 参考 HTML5 直播 所以你的说法 (不能实时打包h264和mp3并打包发送给客户端) 现在已经过时了。 是的,您可以使用 h264 + AAC 来实现。 有几种实现方式; 看看虚幻媒体服务器。 来自虚幻媒体服务器常见问题解答:http://umediaserver.net/umediaserver/faq.html 虚幻 HTML5 直播与 MPEG-DASH
  • Android:同时录制和流式传输(Android: Recording and Streaming at the same time)
    问题 这实际上不是一个问题,而是它展示了我为解决我所面临的最具挑战性的功能之一而进行的所有尝试。 我使用libstreaming库将实时视频流传输到Wowza Server,并且需要同时将其记录在SD卡中。 在此,我将尽一切努力来收集社区中的新思想。 将字节流从libstreaming流复制到mp4文件 发展 我们在libstreaming库中创建了一个侦听程序,将所有已发送的字节复制到mp4文件中。 Libstreaming通过LocalSocket将字节发送到Wowza服务器。 它使用MediaRecorder访问摄像机和设备的麦克风,并将输出文件设置为LocalSocket的输入流。 我们要做的是围绕此从InputStream扩展的输入流创建包装器,并在其中创建File输出流。 因此,每次libstreaming对LocaSocket的输入流执行读取时,我们都会将所有数据复制到输出流,以尝试创建有效的MP4文件。 障碍物 当我们尝试读取文件时,它已损坏。 我们意识到MP4文件中缺少元信息。 特别是moov原子。 我们试图延迟流的关闭,以便给时间发送此标头(这仍然是一个猜测),但是它不起作用。 为了测试此数据的一致性,我们使用了付费软件来尝试恢复视频(包括标题)。 它可以播放,但是主要是绿屏。 因此,这成为了不可靠的解决方案。 我们还尝试使用“ untrunc”
  • 使用HTTP Post从客户端流式传输数据(Streaming data from client with HTTP Post)
    问题 我想将数据从客户端流传输到服务器。 我的应用程序将音频数据流传输到服务器。 我不知道开始流式传输时音频将持续多长时间。 我想通过传输正在记录的数据来减少延迟。 所有数据上传完毕后,我将对其进行处理。 所以,我想要的是HTTP POST,其中流式传输了正文。 在客户端,将在数据可用时发送POST。 在服务器端,我希望它像普通的POST一样具有完整的收集数据。 我目前正在使用Restlet,并将我的流实现为对Restlet框架的块式POST。 但是,我找不到允许我开始POST,然后开始流式传输数据的客户端API。 我没有找到任何有用的搜索档案。 任何人都可以在这里给我指点。 可以通过这种方式使用HTTP POST吗? 我可以使用Restlet吗? 是否存在用于从客户端流向服务器的另一种标准模式/ API? 彼得非常感谢 回答1 接下来要回答我自己的问题。 这是有关使用Apache HttpClient进行流式传输请求的不错的教程 搜索“请求流:” http://hc.apache.org/httpclient-3.x/performance.html#Request_Response_entity_streaming 回答2 我找不到允许我开始POST的客户端API 您可以始终使用浏览器。 在服务器端,它只是一个相同的文件上传。
  • 创建GZipped tar文件并通过PHP动态流式传输?(Creating a GZipped tar file and dynamically streaming it via PHP?)
    问题 是否有一个像 ZipArchive 这样的简单界面用于 tar.gz 档案,它允许我将档案流式传输到客户端而不是将其保存在服务器上? 如果是这样,有人可以告诉我怎么做吗? 谢谢! 回答1 此链接可能对您有用。 您能否更具体地说明不希望文件暂时位于文件系统上? http://www.clker.com/blog/2008/03/27/creating-a-tar-gz-on-the-fly-using-php/ 回答2 您可以使用 passthru() 或 exec() 指示 tar 命令将 tar.gz 文件发送到 stdout。 例如 tar cfz - name1 name2 ...
  • 流式传输到Android MediaPlayer(Streaming to the Android MediaPlayer)
    问题 我试图在我的应用程序中编写一个轻量级的HTTP服务器,以feed动态生成的MP3数据提供给内置的Android MediaPlayer 。 我不允许将我的内容存储在SD card 。 我的输入数据本质上是无限长的。 我告诉MediaPlayer ,其数据源基本上应该类似于"http://localhost/myfile.mp3" 。 我有一个简单的服务器设置,等待MediaPlayer发出此请求。 但是, MediaPlayer并不是很合作。 首先,它进行HTTP GET并尝试获取整个文件。 如果尝试将数据简单地转储到socket ,则会超时,因此我们尝试使用HTTP Range标头将数据分块写入。 MediaPlayer不喜欢这样,并且不会一直请求后续的块。 有没有人成功将数据直接流到MediaPlayer ? 我是否需要实现RTSP或Shoutcast服务器? 我是否只是缺少关键的HTTP header ? 我应该在这里使用什么策略? 回答1 HTTP Server确实托管在电话本身上。 这非常简单:只有一个thread在套接字上侦听HTTP GET请求。 当它收到HTTP请求时,它将创建一个new socket ,写回一些HTTP标头,然后开始将MP3音频数据转储回该socket 。 该HTTP服务器没有执行其他任何操作。 当我流式传输音乐时, Android
  • 使用VideoView进行流式或渐进式下载视频(Using VideoView for streaming or progressive-download video)
    问题 我对VideoView如何用于播放视频感到困惑:从本地文件,以渐进式下载和流式传输。 此示例通过下载文件并在本地播放来为我工作(至少在1.5和2.0上有效)。 但是在播放之前是否必须先下载视频:是否可以像API示例中的VideoViewDemo那样,通过使用setVideoPath或setVideoURI来以渐进式下载或流式播放视频? VideoViewDemo代码建议使用setVideoURI进行流传输,但是我不清楚应该使用哪种URL。 有人是否有示例视频的URL,可以使用VideoViewDemo代码将其流式传输到Android模拟器? VideoViewDemo可以使用渐进式下载吗? 我收到setVideoPath消息“很抱歉,无法播放此视频”,其URL与上面链接的博客示例配合使用时正常工作(这是模拟器中的问题吗?我已经尝试了1.5和2.0。) 我在网上找到了很多示例和文档,但是到目前为止,还没有什么能真正回答这个问题。 回答1 是否可以像API示例中的VideoViewDemo一样,通过使用setVideoPath或setVideoURI来以渐进式下载或流式播放视频? 这应该。 它当然可以与MediaPlayer ,而VideoView只是围绕MediaPlayer和SurfaceView的约200行包装器。
  • 在 ASP.NET 中流式传输大文件上传(Streaming Large File Uploads in ASP.NET)
    问题 我有一个 ASP.NET MVC 应用程序,其页面允许用户上传文件。 这些文件将有几百兆字节。 我在客户端使用 FineUploader,如果浏览器支持,它将使用 FileAPI/XHR,否则将回退到带有 enctype="multipartwhatever" 的 Iframe/form。 所以在服务器端,我需要评估Request.Files.Count > 1 。 如果为true ,则这是旧式上传,我将文件保存为Request.Files[0].InputStream.CopyTo(myFileStream)否则我会执行Request.InputStreawm.CopyTo(myFileStream) 。 这是我编写的一些实际代码,用于执行这些操作:https://github.com/ronnieoverby/file-uploader/blob/master/server/ASP.NET%20MVC%20C%23/FineUpload.cs 这一切正常,但在我的测试中,我注意到 ASP.NET MVC 控制器操作和 HttpHandler 都不会开始处理,直到整个文件上传,如果文件非常大,这很糟糕,因为这意味着它占用了很多Web 服务器的 RAM。 我发现了这一点: Streaming large file uploads to ASP.NET MVC 这听起来很有希望
  • 使用AVPlayer流式传输mp3音频(Streaming mp3 audio with AVPlayer)
    问题 我听到有关此问题的一些相互矛盾的报道。 我想做的是从URL流mp3文件。 我已经进行了数小时的研究,但找不到有关如何执行此操作的最佳指南,甚至找不到应该使用的音频播放器。 一些朋友告诉我,AVPlayer可以流mp3,但是Apple文档说不能。 我倾倒了Matt Gallagher的音频流媒体(http://www.cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html),但该代码在很早以前就很不错了,并且我对此还很陌生,以至于很难完成自动发布,保留和所有这些工作。 我正在尝试流式传输的音频是来自libsyn服务器的相当大的mp3文件,其URL格式为。 http://traffic.libsyn.com/podcastname/episode.mp3 我需要做的就是抓住它并开始播放,并具有暂停和擦洗的能力。 首先,CAN AVPlayer可以流mp3吗? 如果是这样,是否有人可以向我指出任何指南或代码? 如果没有,是否有任何类型的音频播放器类可以流音频? 我曾尝试创建一个AVPlayerItem,并使用URL进行初始化,然后将其添加到AVPlayer中,但是却遇到大量错误加载...和找不到符号...错误。 非常感谢您提供任何信息,谢谢! 回答1 尝试这个 -(void
  • 使用Json.net以JSON格式流式传输大量数据(Streaming large list of data as JSON format using Json.net)
    问题 使用MVC模型,我想编写一个JsonResult,它将Json字符串流式传输到客户端,而不是一次将所有数据转换成Json字符串,然后将其流回客户端。 我有一些动作需要在Json传输时发送非常大的记录(超过300,000条记录),我认为基本的JsonResult实现是不可伸缩的。 我正在使用Json.net,我想知道是否有一种方法可以在转换Json字符串时流化它的块。 //Current implementation: response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(Data, formatting)); response.End(); //I know I can use the JsonSerializer instead Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer(); serializer.Serialize(textWriter, Data); 但是我不确定如何将这些块写入textWriter并写入到响应并调用reponse.Flush(),直到将所有300,000条记录都转换为Json。 这有可能吗? 回答1 假设最终输出是一个JSON数组,并且每个“块”都是该数组中的一项
  • 将视频从Android摄像机流传输到服务器(Streaming video from Android camera to server)
    问题 我已经看到了很多有关如何将视频从服务器流式传输到android设备的信息,但是关于反过来,ala Qik的信息却很少。 有人可以在这里为我指出正确的方向,还是给我一些有关如何解决此问题的建议? 回答1 我主持了一个开源项目,以启用Android手机到IP摄像头的功能: http://code.google.com/p/ipcamera-for-android 从LocalSocket提取原始视频数据,并在流传输之前先检查MP4的MDAT MOOV。 实况视频以FLV格式打包,并且可以通过具有内置Web服务器的Flash视频播放器进行播放:) 回答2 花了我一些时间,但是我终于设法制作了一个能够做到这一点的应用程序。 如果您有兴趣,请查看google代码页:http://code.google.com/p/spydroid-ipcamera/我在代码中添加了大量评论(主要是查看CameraStreamer.java),因此应该很不言自明。 困难的部分实际上是理解RFC 3984并为打包过程实现适当的算法。 (根据rfc,此算法实际上将MediaRecorder生成的mpeg4 / h.264流转换为不错的rtp流) 再见 回答3 我也在研究这个问题,虽然我没有一个好的解决方案,但我确实设法挖掘了SIPDroid的视频代码: http://code.google.com/p
  • 什么是最高效的基于Java的流XSLT处理器? [关闭](What is the Most Efficient Java-Based streaming XSLT Processor? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 5年前关闭。 改善这个问题 我有一个非常大的XML文件,需要将其转换为另一个XML文件,并且我想使用XSLT做到这一点。 我对内存优化而不是速度优化更感兴趣(尽管速度也不错!)。 您将推荐使用哪个基于Java的XSLT处理器? 您是否会推荐其他方法(非XSLT,非Java?),如果可以,为什么? 问题中的XML文件很大,但不是很深-有数百万行(元素),但只有大约3个级别。 回答1 目前,只有三个已知的XSLT 2.0处理器,从速度和内存利用率两方面来看,Saxon 9.x可能是最高效的(至少根据我的经验)。 Saxon-SA ( Saxon的模式识别版本,由于B(基本)版本不是免费的)具有用于流处理的特殊扩展。 从各种现有的XSLT 1.0处理器中,.NET XslCompiledTransform (基于C#,而不是Java!)似乎是冠军。 在XSLT 1.0处理器的基于Java的世界中, Saxon 6.x再次非常出色。 更新: 现在,从最初回答这个问题的日期开始已有3年多的时间,没有任何证据表明所提到的XSLT处理器之间的效率差异已经改变。 至于流媒体: 即使没有任何流,也可以很好地处理带有“数百万个节点”的XML文档。 我进行了一个实验