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

时间:2015-12-24 20:25:04

标签: java sockets server client-server chat

我正在尝试构建点对点跨平台聊天移动应用程序,但我是服务器编程的新手。服务器是用java编写的,我使用spark微框架用于服务器,org.java_websocket用于套接字连接我看了一些教程并实现了一个扩展WebSocketServer的类,我确实了解套接字的工作方式和接口方法将被调用。但我无法弄清楚一些事情:

  1. 如何管理多个客户端,以及它们将如何连接到我的服务器。假设有1000个用户想要连接到我的服务器如何实现它。

  2. 如果以某种方式我设法连接了1000个用户,那么如果用户23想要与用户52聊天,那将会如何发生。

  3. 我在教程中找到的代码要求我指定一个端口,以便我如何确定哪个端口可以从我的服务器中释放,而且没有其他客户端连接到该端口,根据我的知识,只有一个套接字可以在一个端口上打开,那么如何让我的服务器处理数百万用户(假设我得到那么多)。

  4. P.S。我正在使用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 );
        }
    }
    

0 个答案:

没有答案