Tomcat clientendpoint websocket保持关闭

Tomcat clientendpoint websocket保持关闭

问题描述:

我有以下clientendpointwebsockettomcat 7.0.53。正是基于关闭这个例子的网站上https://blog.openshift.com/how-to-build-java-websocket-applications-using-the-jsr-356-api/Tomcat clientendpoint websocket保持关闭

import java.io.IOException; 
import java.net.URI; 
import java.util.ArrayList; 

import javax.websocket.ClientEndpoint; 
import javax.websocket.CloseReason; 
import javax.websocket.ContainerProvider; 
import javax.websocket.DeploymentException; 
import javax.websocket.OnClose; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.WebSocketContainer; 
@ClientEndpoint 
public class connect { 
    private static ArrayList<Session> sessionList = new ArrayList<Session>(); 

    public connect(URI endpointURI) throws DeploymentException, IOException 
    { 
     WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
     container.connectToServer(this, endpointURI); 
    } 

    @OnOpen 
    public void onOpen(Session session) throws IOException 
    { 
     sessionList.add(session); 
     System.out.println(session.getId()); 
     session.getBasicRemote().sendText("hello"); 
    } 

    public void sendMessage(String message) throws IOException 
    { 
     for(Session session : sessionList){ 
      //asynchronous communication 
      session.getBasicRemote().sendText(message); 
     } 
    } 

    @OnClose 
    public void onClose(Session session){ 
     sessionList.remove(session); 
     System.out.println("here"); 
    } 

    @OnError 
    public void onError(Throwable t, Session session){ 
     System.out.println("tedt"); 
    } 
} 

然后我有以下代码启动客户端的端点

import java.io.IOException; 
import java.net.URI; 
import java.net.URISyntaxException; 

import javax.websocket.DeploymentException; 


public class test { 

    public static void main(String[] args) throws DeploymentException, IOException, URISyntaxException { 
     // TODO Auto-generated method stub 
     connect connect = new connect(new URI("ws://localhost:8080/example/talk")); 
     connect.sendMessage("now"); 
    } 

} 

客户端并成功连接到WebSocket的服务器,但是随后它会当我尝试发送消息或执行任何操作时,会立即断开连接,我知道这是因为当我尝试从onOpen函数发送消息时正在调用onError函数。为什么websocket在连接到服务器后立即关闭?

由于您的客户端应用程序中的主线程正在结束,您正在断开连接。在你发送“now”之后,你的程序就会退出。如果你想做其他事情(比如等待来自服务器的响应),那么你必须防止主线程退出。尝试这样的事情在你main方法的末尾:

System.in.read(); 

这将导致你的过程坐下来,等待从标准输入的输入。只需等待测试完成,然后按下命令行上的ENTER即可终止客户端。

您当然会想要注册一个处理程序来接收从服务器返回给客户端的消息。现在,您只能将消息从客户端发送到服务器。

+0

感谢并且当然是关于收到回复的消息,只是一个概念证明,至少我可以与服务器进行通信。 – jgr208 2014-10-30 15:36:03

+0

我正在努力使这项工作,我有一个服务器端点,但我总是得到无法找到实现类的错误。对于ContainerProvider,我有我的构建路径中的javax websocket jar – 2015-01-03 06:11:37

+0

也许问一个新问题? – 2015-01-06 15:07:18