为了账号安全,请及时绑定邮箱和手机立即绑定

Java Websocket与服务器的每个客户端连接都创建新实例

Java Websocket与服务器的每个客户端连接都创建新实例

慕无忌1623718 2021-04-16 18:41:15
我正在使用Java为客户端创建WebSocket服务器以及Javascript和HTML。服务器成功启动,并且可以接受来自WebSocket客户端的连接,但是,每次客户端连接时,它都在创建服务器的新实例。Code of Server:-import java.util.HashSet;import java.util.Set;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;@ServerEndpoint("/websocketendpoint")public class WsServer {    Set<Session> sessions = new HashSet<Session>();     int count = 0;    @OnOpen    public void onOpen(Session session){        System.out.println("Open Connection ...");        count+=1;         System.out.println(count); //On the logcat it shows only 1        sessions.add(session);        for(Session s: sessions)        {            System.out.println(s); //On the logcat it shows only session        }    }    @OnClose    public void onClose(){        System.out.println("Close Connection ...");    }    @OnMessage    public String onMessage(String message){        System.out.println("Message from the client: " + message);        String echoMsg = "Echo from the server : " + message;        return echoMsg;    }    @OnError    public void onError(Throwable e){        e.printStackTrace();    }}在第二个客户端连接之后,它仅将1表示为一个计数,并且在上仅存储了一个会话Set。我正在使用的技术:-Tomcat v9.0Eclipse Java EE IDE服务器用Java和客户端用JavaScript用于WebSocket的javax.websocket。我的问题是我们如何才能停止这种情况并使客户端仅连接到一个实例?
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

查看WsServer的方法名称。它仅适用于一个客户端,因为函数不会发送与它们的连接ID。因此,请建立您的计数器static或将其移至其他班级。


查看完整回答
反对 回复 2021-04-28
?
慕斯709654

TA贡献1840条经验 获得超5个赞

这是默认行为。

尝试@Singleton在之前添加注释@ServerEndpoint



查看完整回答
反对 回复 2021-04-28
  • 2 回答
  • 0 关注
  • 550 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信