Я думаю, это зависит от ваших вариантов использования. Но некоторые мысли:
Готовые фреймворки - хороший путь. Как вы обнаружили, здесь есть над чем подумать. Увидеть ниже. Некоторые возможности (которые реализуют очень разные стратегии) - это Jini (основанная на обнаружении инфраструктура, ориентированная на восстановление) или системы массового обслуживания (которые предлагают отличную развязку клиент / сервер и транзакционность - на основе JMS и / или на основе AMQP)
Объединение является серьезной проблемой. Это предотвратит остановку вашего сервера перед лицом слишком большого количества клиентов. Можете ли вы использовать Java ExecutorService ?
Как вы можете контролировать этот сервер? Можете ли вы использовать JMX и JConsole ? Если вы можете, я бы сказал, что это хороший первый шаг.
Что произойдет, если ваш сервер выключится? Будут ли у ваших клиентов возможность автоматического переподключения? Повторить их невыполненные запросы? Является ли хорошей идеей повторить запрос (т. Е. Идемпотентно)?
Что вы транспортируете между клиентом и сервером? Являются ли они сериализованными классами Java? Если это так, вы гарантировали, что простая перекомпиляция сервера не требует перекомпиляции клиентов (через serialVersionUid
s). Если вы переносите строки и конвертируете в байтовые массивы (общий сценарий), используют ли клиент и сервер одинаковую кодировку символов? Если вы не уверены в кодировке, прочитайте this и (возможно) примените ту же самую кодировку клиент / сервер с помощью смешанно названного свойства file.encoding
.
Как и в случае распределенных вычислений, рассмотрим Ошибок распределенных вычислений Питера Дойча .