Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Клиент-серверное межъязыковое взаимодействие


Автор: mr.Anderson 28.11.2011, 11:03
Всем привет. Задался следующей задачей, которую сейчас опишу, интересует ее реализуемость в принципе, а также методика реализации (куда ковырять хотя бы).

Задача: создать клиент-серверное приложение. Мультиплатформенное. Целевые устройства - мобильники на базе iOS и Андроид. Сервер, как я понимаю, может функционировать сам по себе и может быть написан на чем угодно. К примеру, я пишу сервер на C# с использованием базы MSSQL. Каждая из указанных платформ должна будет взаимодействовать с этим сервером, посылая ему запросы и, соответственно, получая ответы.

Вопрос в следующем. Каждая из этих платформ поддерживает свой язык разработки (Андроид - Java, iOS - Objective-C). Так вот. Можно ли разрабатывать клиенты на каждой из этих платформ на их "родном" языке, и успешно взаимодействовать с сервером, написанном на C#? Если это возможно, то каким образом строится это взаимодействие, на каких технологиях? К примеру, если бы я писал сайт на ASP.NET, то взаимодействие с сервером я бы мог сделать, допустим, через протокол SOAP. И тупо кидать данные туда-обратно в виде XML. А то и вовсе подключить технологию WСF, там это возможно. А вот как быть в межъязыковом варианте? То есть, нужно построить два клиента, один - Java <-> C#, второй - Objective-C <-> C#. Это возможно? Если да, по какому принципу должно строиться общение? Как нужно посылать запросы серверу (через какой механизм), и в каком виде отдавать ответы, чтобы оба клиента могли их интерпретировать? В принципе-то, как я понимаю, получать запросы от сервера можно в том самом XML-виде, а потом парсить его. А вот посылать ему запросы каким образом, представляю плохо.

Если же такой вариант невозможен (что печально), то каким образом можно реализовать указанную задачу (два клиента на несвязанных платформах с общим сервером)?

Буду благодарен за любые подсказки, включая полезную литературу по теме.

Автор: ksnk 28.11.2011, 12:59
Не вижу причины, по которой нельзя было бы на java и на c# воспользоваться XML форматом для обмена данными.

mr.Anderson, Если взять http://www.madewithmarmalade.com/, то можно все писать на с++.
Для всех мобильников, включая iOs, андроид, симбиан и что там еще им в голову придет... Лицензия, правда, стоит денег.

Автор: Akina 28.11.2011, 14:41
Протоколы обмена придуманы именно для того, чтобы не засорять себе голову, какая ось и какой софт установлены на той стороне.

Автор: mr.Anderson 28.11.2011, 15:08
Хорошо, то есть получается, что отсылку запросов на сервер и получение от него ответа я могу оформлять в виде XML, все верно? А уже собственно структуры XML, как ответа, так и запроса, я могу придумывать и формировать сам, и это не будет изобретением велосипеда. Я все правильно понял?

И если все так, то есть ли какие-то общепринятые принципы составления XML-структур для формирования запроса к серверу? Чтобы не изобретать что-то страшное вида
Код

<request>
    <action>MyMethodName</action>
    <param>My Param 1</param>
    <param>My Param 2</param>
</request>

Это, вроде бы, и неплохо (на мой непрофессиональный взгляд))), но вот результатом будет лесенка из if-else для сопоставления имени метода и собственно конкретного метода, что не очень весело. На этот счет есть какой-то общий принцип?

Добавлено через 12 минут и 25 секунд
Нет, вообще-то, средствами отражения можно эту штуковину быстренько сделать нормальной, но, может, все же есть что-то менее экзотическое?

Автор: mr.Anderson 30.11.2011, 09:33
И тишина... Ответьте на последнее сообщение, чтобы у меня сомнений уже по реализации не оставалось)

Автор: Akina 30.11.2011, 09:37
Ничего "экзотического" не вижу.
Просто создай полную спецификацию своего протокола. 

Автор: mr.Anderson 30.11.2011, 10:33
Akina, больше интересует именно посылка запроса на сервер. Посылка будет очень простая - вызов конкретного метода на сервере с конкретным набором параметров. В общем-то, приведенная хмлка это и описывает, больше там ничего не будет. Получение такого вида хмл и перевод имени и параметров в реальные объекты через отражение - это не экзотика?

Более конкретно:
Код

<request datetime="..." ip="..." page="...">
    <action>имя_метода</action>
    <param type="тип_параметра_1">значение_параметра_1</param>
    <param type="тип_параметра_2">значение_параметра_2</param>
    ...
</request>

Вот так это будет выглядеть. В коде, соответственно, будет производиться поиск метода через отражение, преобразование и подстановка параметров соответственно указанному типу, и собственно выполнение метода. Нормальный способ?

Автор: voral 30.11.2011, 13:18
Изучите работу с сокетами, с "сетевыми" классами. Вы можете пересылать хоть по одному байту. Можете на русском языке литературный текст. Вообще все что у годно и как угодно. Лишь бы на обеих сторонах смогли все это дело распарсить.

Что касается xml в принципе и вики достаточно http://ru.wikipedia.org/wiki/XML
есть еще, можно сказать, модный JSON http://ru.wikipedia.org/wiki/JSON

Автор: mr.Anderson 30.11.2011, 13:27
Спасибо, все в целом понятно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)