猿问

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

我正在使用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

我正在使用的技术:-

  1. Tomcat v9.0

  2. Eclipse Java EE IDE

  3. 服务器用Java和客户端用JavaScript

  4. 用于WebSocket的javax.websocket。

我的问题是我们如何才能停止这种情况并使客户端仅连接到一个实例?


慕无忌1623718
浏览 551回答 2
2回答

米脂

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

慕斯709654

这是默认行为。尝试@Singleton在之前添加注释@ServerEndpoint。
随时随地看视频慕课网APP

相关分类

Java
我要回答