gpt4 book ai didi

java - Tomcat clientendpoint websocket不断关闭

转载 作者:行者123 更新时间:2023-11-28 22:42:19 25 4
gpt4 key购买 nike

我在 tomcat 7.0.53 中为 websocket 设置了以下 clientendpoint 类。它基于网站上的这个示例 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 在连接到服务器后立即关闭?

最佳答案

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

System.in.read();

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

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

关于java - Tomcat clientendpoint websocket不断关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com