本示例基于Restlet in Action
书中的示例。
如果我尝试
public class StreamResource extends ServerResource
{
@Get
public Representation getStream() throws ResourceException, IOException
{
Representation representation = new WriterRepresentation(MediaType.TEXT_PLAIN)
{
@Override
public void write(Writer writer) throws IOException
{
String json = "{\"foo\" : \"bar\"}";
while (true)
{
writer.write(json);
}
}
};
return representation;
}
}
它可以正常工作,并将json字符串连续发送给客户端。
如果在这样的while循环中引入延迟
String json = "{\"foo\" : \"bar\"}\r\n";
while (true)
{
writer.write(json);
try
{
Thread.sleep(250);
}
catch (InterruptedException e)
{}
}
我希望客户端在一秒钟内可以获取4次数据,但似乎没有任何东西可以到达客户端。
谁能解释为什么引入
Thread.sleep()
会这样做吗?在向客户端流式传输数据时引入延迟的好方法是什么? 最佳答案
您应该尝试使用Jetty连接器而不是内部Restlet连接器。即使我们正在对其进行修复,该连接器仍无法投入生产。
您也可以尝试使用简单扩展,该扩展具有比Jetty扩展更少的依赖JAR。