Отправка данных через сокет из Objective-C в Java - PullRequest
0 голосов
/ 10 июля 2009

У меня есть Java-программа (назовите ее Jack) и программа Objective-C (назовите ее Oscar), которую я запускаю на том же компьютере Mac OS X. Оскар отправляет строковое сообщение через сокет Джеку, один раз в секунду.

Для надежности и производительности было бы лучше поддерживать открытую розетку между Джеком и Оскаром? Или было бы лучше повторно открыть сокет, отправить сообщение, а затем снова закрыть сокет?

Ответы [ 5 ]

2 голосов
/ 10 июля 2009

Держи его открытым Джек, держи его открытым. У меня уже есть несколько циклов ЦП, чтобы открыть и закрыть соединение, чтобы сделать это снова в следующую секунду.

2 голосов
/ 10 июля 2009

Держите его открытым. Вы будете нуждаться в этом много (один раз в секунду), и есть некоторые дополнительные затраты, связанные с открытием новых сокетов. Кроме того, вы будете жевать кучу новыми объектами, пока не пройдет сборщик мусора.

1 голос
/ 10 июля 2009

Если вы можете оставить пакет или два, вы можете вместо этого использовать UDP.

Время от времени долгосрочные TCP-соединения становятся немного странными и зависают при плохом соединении. Обычно выздоравливают, но не всегда - а тем временем они могут замедлиться.

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

Сохранение открытого соединения может сработать для вас, и теоретически это нормально ... Просто мне не всегда везло.

1 голос
/ 10 июля 2009

Было бы проще сделать вызов нативного интерфейса Java? Лично я думаю, что локально возиться с сокетами может быть немного излишним, но опять же, я не знаю всей истории о том, чего вы пытаетесь достичь.

0 голосов
/ 10 июля 2009

Извините, я довольно быстро прочитал вопрос. Да, я бы оставил сокет открытым, если он находится на локальной машине. Нет смысла открывать и закрывать каждую память, которая должна быть выделена. Шлифование вперед и назад не поможет в этом случае.

Просто я правильно понимаю, что вы пишете приложение сервера Какао, которое прослушивает соединение, чтобы оно могло передавать некоторые данные в приложение Java, которое не имеет доступа к информации, возвращаемой из API Какао?

Вы уверены, что не можете просто получить результаты от команды терминала в Java. Я полностью догадываюсь, но я подумал, что в этом случае вы могли бы улучшить то, что вы планируете делать.

...