Как структурировать многопоточный TCP-клиент в Java - PullRequest
0 голосов
/ 19 марта 2011

Мне нужно написать многопоточный TCP-клиент на Java, но я не уверен, как его лучше структурировать. Я хотел бы, чтобы клиент работал в другом потоке, чтобы не блокировать основной поток.

В идеале я бы создал клиента в главном потоке, а затем поручил бы клиенту подключиться к серверу. Соединение, которое может занять некоторое время, будет происходить в другом потоке. После подключения клиент уведомляет основной поток и начинает прослушивать входящие сообщения с сервера. Основной поток уведомляется о получении сообщений.

В настоящий момент мой план состоит в том, чтобы клиентский класс TCP реализовал Runnable и выполнял как соединение, так и прием в методе run.

Буду признателен за любые мысли о том, как структурировать tcp-клиент.

Ответы [ 2 ]

1 голос
/ 19 марта 2011

Некоторые вещи, которые вы должны учитывать при структурировании вашего приложения:1. В идеале должны быть отдельные потоки для чтения и записи сетевых потоков.В противном случае могут возникнуть проблемы.2. Если вы хотите «сообщить» другим потокам о чем-то или передать что-то, рассмотрите идиому / объект Java «Условие» и / или блокирующие очереди / запросы.

0 голосов
/ 19 марта 2011

Взгляните на JBoss Netty и обработайте обмен данными между потоками с помощью Queue , которая соответствует вашим потребностям.

Netty имеет управляемую кривую обучения,но это окупается легким обслуживаемым дизайном и до тех пор, пока вам не понадобится передача UDP (тогда я бы посмотрел на Apache Mina ), этого вполне достаточно.Также вам не нужно реализовывать конечный автомат с помощью Netty.

...