本示例基于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。

10-05 17:45