Java websocket对等客户端套接字管理

Java websocket对等客户端套接字管理,java,sockets,server,client-server,chat,Java,Sockets,Server,Client Server,Chat,我正在尝试构建点对点跨平台聊天移动应用程序,但我对服务器编程还不熟悉。服务器是用java编写的,我正在为服务器使用spark micro framework,为套接字连接使用org.java_websocket,我看到了一些教程,并实现了一个扩展WebSocketServer的类,我确实了解了套接字的工作方式和接口方法的调用。但有几件事我想不出来: 如何管理多个客户端,以及它们如何连接到我的服务器。假设1000个用户想要连接到我的服务器,那么如何实现这一点 如果我设法连接了1000个用户,那么如

我正在尝试构建点对点跨平台聊天移动应用程序,但我对服务器编程还不熟悉。服务器是用java编写的,我正在为服务器使用spark micro framework,为套接字连接使用
org.java_websocket
,我看到了一些教程,并实现了一个扩展
WebSocketServer
的类,我确实了解了套接字的工作方式和接口方法的调用。但有几件事我想不出来:

  • 如何管理多个客户端,以及它们如何连接到我的服务器。假设1000个用户想要连接到我的服务器,那么如何实现这一点

  • 如果我设法连接了1000个用户,那么如果用户23想要与用户52聊天,那将如何实现

  • 我在教程中找到的代码要求我指定一个端口,因此我如何确定哪个端口是服务器的空闲端口,并且没有其他客户端连接到该端口,并且据我所知,一个端口上只能打开一个套接字,所以我如何使我的服务器处理数百万用户(假设我有那么多用户)

  • 另外,我正在使用Tomcat服务器

    下面的代码是我在教程中找到的:

    public class SocketHandler extends WebSocketServer {
    
        public SocketHandler(int port) throws UnknownHostException{
            super(new InetSocketAddress( port ));
        }
    
        public SocketHandler(InetSocketAddress address) throws UnknownHostException{
            super(address);
        }
    
        @Override
        public void onOpen( WebSocket conn, ClientHandshake handshake ) {
            this.sendToAll( "new connection: " + handshake.getResourceDescriptor() );
            System.out.println( conn.getRemoteSocketAddress().getAddress().getHostAddress() + " entered the room!" );
        }
    
        @Override
        public void onClose( WebSocket conn, int code, String reason, boolean remote ) {
            this.sendToAll( conn + " has left the room!" );
            System.out.println( conn + " has left the room!" );
        }
    
        @Override
        public void onMessage( WebSocket conn, String message ) {
            this.sendToAll( message );
            System.out.println( conn + ": " + message );
        }
    
        @Override
        public void onWebsocketMessageFragment(WebSocket conn, Framedata frame) {
            super.onWebsocketMessageFragment(conn, frame);
            System.out.println( "received fragment: " + frame );
        }
    }