我正在尝试构建点对点跨平台聊天移动应用程序,但我是服务器编程的新手 . 服务器是用java编写的,我使用spark微框架服务器和 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 );
    }
}