我正在尝试构建点对点跨平台聊天移动应用程序,但我是服务器编程的新手。服务器是用java编写的,我使用spark微框架用于服务器,org.java_websocket
用于套接字连接我看了一些教程并实现了一个扩展WebSocketServer
的类,我确实了解套接字的工作方式和接口方法将被调用。但我无法弄清楚一些事情:
如何管理多个客户端,以及它们将如何连接到我的服务器。假设有1000个用户想要连接到我的服务器如何实现它。
如果以某种方式我设法连接了1000个用户,那么如果用户23想要与用户52聊天,那将会如何发生。
我在教程中找到的代码要求我指定一个端口,以便我如何确定哪个端口可以从我的服务器中释放,而且没有其他客户端连接到该端口,根据我的知识,只有一个套接字可以在一个端口上打开,那么如何让我的服务器处理数百万用户(假设我得到那么多)。
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 );
}
}