【问题标题】:Tomcat clientendpoint websocket keeps closingTomcat客户端websocket不断关闭
【发布时间】:2014-10-29 17:00:59
【问题描述】:

我有以下clientendpoint 类用于tomcat 7.0.53 中的websocket。它基于网站上的这个例子https://blog.openshift.com/how-to-build-java-websocket-applications-using-the-jsr-356-api/

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 服务器,但是当我尝试发送消息或执行任何操作时它会立即断开连接,我知道这一点,因为当我尝试发送消息时正在调用 onError 函数来自onOpen 函数。为什么websocket连接到服务器后立即关闭?

【问题讨论】:

    标签: java tomcat websocket client-server tomcat7


    【解决方案1】:

    您正在断开连接,因为您的客户端应用程序中的主线程正在结束。在您发送“现在”之后,您的程序就会退出。如果您想做其他任何事情(例如等待服务器的响应),那么您必须阻止主线程退出。在 main 方法的末尾尝试这样的操作:

    System.in.read();
    

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

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

    【讨论】:

    • 谢谢,当然是关于接收消息的,这只是一个概念证明,至少我可以与服务器通信。
    • 我正在努力完成这项工作,我有一个服务器端点,但我总是收到找不到实现类的错误。对于 ContainerProvider,我的构建路径中有 javax websocket jar
    • 也许要问一个新问题?
    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2014-07-11
    • 2011-11-01
    • 2012-03-20
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多