B4J Question Jetty setting maxIdleTime

alwaysbusy

Expert
Licensed User
I'm experiencing Timeouts in on the server side streaming audio files. Although these messages appear in the log, the audio file keeps playing.

B4X:
java.util.concurrent.TimeoutException: Idle timeout expired: 30001/30000 ms
   at org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:166)
   at org.eclipse.jetty.io.IdleTimeout$1.run(IdleTimeout.java:50)
   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)
2016-03-10 17:18:35.259:WARN:oejs.HttpChannel:qtp23170705-13: //localhost:51042/demo/Audio/04%20Steal.mp3
java.io.IOException: java.util.concurrent.TimeoutException: Idle timeout expired: 30001/30000 ms
   at org.eclipse.jetty.util.SharedBlockingCallback$Blocker.block(SharedBlockingCallback.java:226)
   at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:164)
   at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:436)
   at org.eclipse.jetty.util.IO.copy(IO.java:163)
   at org.eclipse.jetty.util.resource.Resource.writeTo(Resource.java:682)
   at org.eclipse.jetty.servlet.DefaultServlet.sendData(DefaultServlet.java:995)
   at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:520)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
   at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821)
   at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)
   at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:224)
   at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158)
   at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
   at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
   at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090)
   at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
   at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)
   at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
   at org.eclipse.jetty.server.Server.handle(Server.java:517)
   at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
   at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
   at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
   at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
   at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
   at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
   at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
   at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
   at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
   at java.lang.Thread.run(Thread.java:745)

Searching the net, I should be able to extend this timeout, e.g maxIdleTime=500000. (it is 30000 by default).

I tried:

B4X:
srvr.SetStaticFilesOptions(CreateMap("cacheControl": "max-age=604800,public","gzip":True,"dirAllowed":False, "maxIdleTime":"500000"))

But I do not think this is the right place to set this param (it is ignored).
 

Erel

Administrator
Staff member
Licensed User
You can use this code:
B4X:
srvr.Start
Dim jo As JavaObject = srvr
Dim connectors() As Object = jo.GetFieldJO("server").RunMethod("getConnectors", Null)
Dim timeout As Long = 50000
For Each c As JavaObject In connectors
   c.RunMethod("setIdleTimeout", Array(timeout))
Next
 
Upvote 0

ilan

Expert
Licensed User
I solved the issue on the browsers side

can you please explain how?
i am streaming mp4 movies on my server and every time i load a video i get after 30sec this error message. everything keeps working fine but i still get this error. can you please tell me how you solved it?

thanx
 
Upvote 0

ilan

Expert
Licensed User
Upvote 0

Cableguy

Expert
Licensed User
Upvote 0
Top