This is probably a key element in your question as a server can maximum handle 65536 simultanious TCP sockets per single IP address (not a B4J limitation, just a hardware one).
This would mean you will have to start doing load-balancing over a lot of servers to keep millions of connections open (16 servers per million). Each of the servers will have to run an instance of your jServer app and something like HAProxy will have to be configured to pick one of the available sockets accross all the servers.