Hi This is more a tomcat issue - so should go on tomcat list. They worked on such things lately in their test suite I tjink.
That said this send is synchronous so can be due to a read issue more than a send issue one. Having an ack message is a workaround but maybe test with multiple server instances too (client/server). Can also be link to timeout or server.xml config on connectors. Le 29 avr. 2016 00:49, "tonywestonuk" <[email protected]> a écrit : > There appears to be a bug in Websocket Client.... > > > I am getting "java.io.IOException: An existing connection was forcibly > closed by the remote host". This appears to be when the websocket client is > closed before all the information has been sent. > > Surely session.close should wait until everything has been sent?..... > > I'm not actually sure how to fix this in code... maybe having the client > send an 'end-of-data', then the server send an acknowlegement of the > end-of-data, and only then close the socket? > > But....is this a workaround for a bug? > > At the moment, I am using https://github.com/TooTallNate/Java-WebSocket > instead, which doesn't have this issue. To reproduce: Create the following > 2 classes, then navigate to http://localhost:8080/ : > > > > > WebsocketClient.java > > import java.io.IOException; > import java.net.URI; > > import javax.servlet.ServletException; > import javax.servlet.annotation.WebServlet; > import javax.servlet.http.*; > import javax.websocket.*; > import javax.websocket.RemoteEndpoint.Basic; > > @WebServlet("/") > public class WebsocketClient extends HttpServlet { > > @Override > protected void doGet(HttpServletRequest req, HttpServletResponse > resp) > throws ServletException, IOException { > > try { > > Session session = > ContainerProvider.getWebSocketContainer() > .connectToServer(new MyEndpoint(),new > URI("ws://localhost:8080/WebsocketClientBug/ws/testing")); > > > Basic br = session.getBasicRemote(); > for (int i=0; i<100; i++){ > br.sendText("this is some random text"); > } > session.close(); > > } catch (Exception e) {e.printStackTrace();} > } > > > @ClientEndpoint > public static class MyEndpoint{ > @OnError > public void error(Throwable err){ > err.printStackTrace(); > } > } > > } > > > > > WebsocketServer.java > > import javax.websocket.OnMessage; > import javax.websocket.Session; > import javax.websocket.server.ServerEndpoint; > > @ServerEndpoint("/ws/testing") > public class WebsocketServer { > > @OnMessage > public void message(Session sess, String payload){ > try { > Thread.sleep(10); > } catch (InterruptedException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } > } > > } > > > > > -- > View this message in context: > http://tomee-openejb.979440.n4.nabble.com/Websocket-Client-Bug-tp4678282.html > Sent from the TomEE Dev mailing list archive at Nabble.com. >
