Я сталкиваюсь со следующей дилеммой:
Разработайте новый сетевой протокол, который использовался бы между сервером (программное обеспечение Java) и настольными и мобильными клиентами. Мобильные клиенты включают J2ME, Android и возможно в будущем даже iPhone.
Поток данных является постоянным потоком в реальном времени с также более нечастыми частями. Клиенты показывают формы сигнала этих данных и также данных, которые не должны быть обновлены немедленно. Клиенты должны также аутентифицироваться.
Я хотел бы постараться не создавать полностью пользовательскую реализацию протокола TCP с нуля, если это возможно.
В эти дни люди обычно recommed выполнение всего в стиле REST, который я также действительно люблю. В этом случае я немного колеблюсь хотя: как Вы реализовали бы постоянный поток данных сверху REST? Разделенный на блоки ответ HTTP?
Я также рассматриваю протоколы непростого текста (текущие, которые я заменяю, протоколы двоичной синхронной передачи данных). Те текущие протоколы имеют свои довольно серьезные проблемы, таким образом, они действительно должны быть заменены.
Буферы протокола Google похожи на довольно сильного кандидата на обработку деталей низкого уровня, но я не уверен, может ли она использоваться от Android. И я вполне уверен, что реализация iPhone имела бы проблемы с ним также.
Существует также ЗВУКОВОЙ СИГНАЛ, но я думаю, что это в значительной степени мертво и интересно, было это когда-либо широко используемый.
Какие-либо идеи?
Думаю, прежде чем попасть в проект протокола, вы должны действительно внимательно позаботиться о следующих проблемах:
Вы можете посмотреть KRYO и / или Kryonet , которые находятся NIO и Java и работают на рабочем столе и Android. Вы должны были бы написать iPhone, однако, что будет довольно сложно. Kryo бьет буферы протокола Google в сериализованном размере ( тестов здесь ) и простота использования (не нужно писать схему типа .proto.
Что касается NIO, вы можете проверить NPTL . Старый становится новым снова.
Вы можете посмотреть на RTP (транспортный протокол транспорта в реальном времени) , что может быть непосредственно полезно (и / или может быть переплетением), но его дизайн даст вам некоторые хорошие идеи для работы из. И вы вполне можете быть в состоянии использовать его.
Ваш XPath правилен и вы, кажется, ответили на первую часть своего собственного вопроса (почти):
doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
«кодекс выше получит меня любой TR стола таблицы , где угодно , у которого есть tbody ребенок с id признака, равным threadbits_forum_251»
//
, означает, что следующий элемент может появиться где угодно в документе.
/tr
в конце означает, получить узел tr
совпадающего элемента.
Вам не нужно извлекать каждый атрибут один за другим. Просто получите весь узел, содержащий все четыре атрибута в Nokogiri, и получите атрибуты, используя:
theNode['href']
theNode['src']
Где theNode
является вашим объектом Nokogiri Node .
Изменить:
К сожалению, я не использовал эти библиотеки, но я думаю, что оценка и синтаксический анализ XPath выполняются Mechanize. Вот как вы получите весь элемент и его атрибуты за один ход.
doc.xpath("td[3]/div[1]/a").each do |anchor|
puts anchor['href']
puts anchor['src']
...
end
-121--1483852- Это не элегантное решение, но вы можете сделать это по прямому http, не задав значение поля content-length в ответе http и не закрывая выходной поток. Просто продолжайте отправлять данные.
Вы также можете задать очень большую длину контента и отправить данные обратно с сервера в реальном времени, пока сервер не отправил эту сумму, тогда клиент может выбрать сделать новый запрос или нет.
К сожалению, я не смог найти никаких полезных ссылок для этих идей, но я верю, что вы получите идеи.
Настоящая плюсовая сторона этих идей заключается в том, что они находятся над http, что достигается проблемой брандмауэра, и вы можете реализовать ваше приложение в виде веб-приложения с сервлетом.
Только мои 2 цента;)