PDA

Просмотр полной версии : Пример работы с сокетами в AS3


ZackMercury
27.04.2014, 15:44
Кто может скинуть пример отправки и приёма сокетов с клиента и с сервера на PHP или Java? Если кто-то встречал, или может сам быстро накатать, скиньте пожалуйста.
Хотя в общем я бы хотел заодно спросить совета - какой язычок лучше для многопользовательских игр использовать?)

morgenshtern
27.04.2014, 17:24
Вот на этом сайте часто неплохие примеры кто-то выкладывает, и даже про сокеты:
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/net/Socket.html#includeExamplesSummary


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

ZackMercury
27.04.2014, 21:01
Вот на этом сайте часто неплохие примеры кто-то выкладывает, и даже про сокеты:
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/net/Socket.html#includeExamplesSummary

Вижу только клиент, а сервер, допустим, на C# или Java?

alexcon314
27.04.2014, 22:33
Вверну 5 копеечек. Вот все многие говорят: сервер - это java, C#, ну, Си для красного словца ввернут...
Тем временем в "страшном и ужасном" Си/С++ есть замечательные библиотеки-обвязки над сокетами на любой вкус.
Из тех, что на слуху:

boost::asio - тяжеленькая и по весу и по порогу, но ... это boost.
libuv - платформа, на которой крутится node.js. (Си-style)
libevent - асинхронный неблокирующий ввод-вывод.
poco - высокоуровневая либа, содержит массу полезностей в удобных оберточках (a-ля C#).

Конечно, изложенное выше, никак не призыв отказываться от привычных и знакомых инструментов, той же явы.. но все же :).
Ну, да. На любителя, кто-то скажет. Но профессионалы вполне себе пользуют.

PS. очень жаль, что нет биндинга zmq (Zerо MQ) для флеша. Это... ну очень мощная обвязка для серверов.
PSS. естественно, все опенсорс :).

UPD.
нет биндинга zmq (Zerо MQ) для флеша
о_о. Просмотрел, есть биндинг http://zeromq.org/bindings:javascript

ZackMercury
27.04.2014, 22:42
Вверну 5 копеечек. Вот все многие говорят: сервер - это java, C#, ну, Си для красного словца ввернут...
Тем временем в "страшном и ужасном" Си/С++ есть замечательные библиотеки-обвязки над сокетами на любой вкус.
Из тех, что на слуху:

boost::asio - тяжеленькая и по весу и по порогу, но ... это boost.
libuv - платформа, на которой крутится node.js. (Си-style)
libevent - асинхронный неблокирующий ввод-вывод.
poco - высокоуровневая либа, содержит массу полезностей в удобных оберточках (a-ля C#).

Конечно, изложенное выше, никак не призыв отказываться от привычных и знакомых инструментов, той же явы.. но все же :).
Ну, да. На любителя, кто-то скажет. Но профессионалы вполне себе пользуют.

PS. очень жаль, что нет биндинга zmq (Zerо MQ) для флеша. Это... ну очень мощная обвязка для серверов.
PSS. естественно, все опенсорс :).
alexcon314, приятель, мне бы понять, как вообще языки между собой обмениваются и как работать с сокетами без всяких обвязок для начала. Нигде не могу найти самого незапутанного всякими Darkstar'ами кода, без лишних библиотек.

morgenshtern
27.04.2014, 23:05
мне бы понять, как вообще языки между собой обмениваются и как работать с сокетами без всяких обвязок для началану какой протокол будете использовать, так и будут обмениваться) Модифицируйте существующие или свой пишите.
Не "языки обмениваются", а приложения. На чем написаны, это уже дело другое.

Возьмите какой нить простейший пример сервера на пхп, клиента на as3 из доки адоба, и поковыряйте.

ZackMercury
28.04.2014, 00:13
Возьмите какой нить простейший пример сервера на пхп, клиента на as3 из доки адоба, и поковыряйте.
Не вижу, я походу совсем слепой, у класса Socket только один пример без сервера, просмотрел список, вроде подобных примеров нет.

morgenshtern
28.04.2014, 00:51
так я и говорю, клиента на ас3 из примера адоба, что кинул, а сервер на пхп придется найди отдельно.
Это есть в гугле. Например http://habrahabr.ru/company/ifree/blog/209864/
Примеры на яве / сях гуглятся аналогино пхпшному...

alexcon314
28.04.2014, 08:28
языки между собой обмениваются
Обмениваются языки? Эмм... да. "мышь" и "mouse" - это языковые представления одного и того же. Данные суть независимая от языка сущность и всегда в компьютерном мире пердставляется в виде последовательности байт. Модель обмена этими самыми данными (читай байтами) не слишком сложна для понимания, если абстрагироваться от физических процессов, происходящих при этом.

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

Средствами языка вы можете создавать сокеты, устанавливать соединения, писать-читать данные. Собственно, в любом языке так или иначе используется обвязка над сокетами, физического доступа к ним как такового нет, это прерогатива ядра ОС. Специализированные библиотеки позволяют сделать работу с сокетами из языка более прозрачной и комфортной. В плане количества рутинного кода, прежде всего.
Организация простейшего сокет-сервера. (http://www.flasher.ru/forum/showthread.php?t=134415)

ZackMercury
05.05.2014, 01:31
alexcon314. Решил я вот взять и начать учить С++ 3 дня назад.
Могу с уверенностью сказать, что это были самые унылые 3 дня моей жизни.
Такой жести я ещё не видел.
Код вообще никак не структуризируется, все действия только последовательные.
В конце концов, столкнулся даже с тем, что метод нельзя объявить после кода, где он используется.
Просто жесть. Названия страшные(Особенно в OpenGL). В OpenGL тысячи функций и оно вообще не структуризируется в памяти(памяти мозга).
Ладно, хорошо, думаю, пусть даже так. Есть ведь классы, можно с ними работать.
Потом столкнулся с той фигнёй, что в С++ нельзя получить длину массива и приходится пользоваться каким-то бредом, типа
for( vector :: iterator i = ... .start(); i < ... .end(); i++)
Даже не запомнил, что там писалось, ибо даже не представляю, каким нужно быть извращенцем, чтобы придумать подобное.
Мне искренне жалко людей, которые пишут на С++, потому, что это просто жесть.
Я бы с ассемблером работал с большим интересом(надеюсь).

И тут я подумал, что, может быть, мне просто попался неудачный чувак, который всё неправильно трактует. И тут я посмотрел на передаваемые аргументы в функции OpenGL и захотелось выбить глаз разработчику С++. Передаваемые аргументы с прочерком, это просто полная противоположность договорённостям в AS3. Пространства имён, нафига они вообще, когда есть классы? Ну ладно это...
Я даже смирился с тем, что приходится инициализировать массивы магическими значениями.
Я даже смирился с тем, что с памятью приходится работать явно, а не абстрагировавшись от процессов, происходящих при этом в компьютере. Да, иногда это действительно может быть нужно.
Я даже смирился с ссылками на ячейки памяти(выделяемые под переменные), и что они действительно мне пригодятся(хотя я так и не понял, зачем). Ну пусть таким образом и можно получить второй и третий и минус первый элемент массива лишь прибавив к ссылке +1, +2 или -1. А каково их практическое применение(вряд ли кто-то будет работать с массивом таким образом, когда можно просто получить элемент явным образом(в квадратных скобках).

Самое жестокое - это работа с OpenGL вообще без ООП(Тупо вызывая функции).
Вместо нормального ООП какие-то пространства имён, вообще не структуризированные.
Жесть, когда я посмотрел на работу с этими функциями.
Чтобы вращать объект, нужно сделать 3 глобальных переменных.

Ладно, подумал я. Тут ведь можно зашаманить это дело в понятные символы директивы препроцессора С++.
В общем, или у меня просто каша в голове, или этот С++ - это жесть.
Даже имена встроенных классов с маленькой буквы(кстати, почему в AS3 int со строчной буквы я так и не вдуплил).
Вот если у вас есть пример любой несложной программы на С++, написанной в хорошем тоне(чтобы я увидел, что С++ ещё хоть куда не идёт), скиньте примерчик.

Ладно, пойдём дальше.
Сегодня же я открыл видеокурс от англичанина по 3D Game Programming на Java.
Мои глаза, кажется, вернулись в своё нормальное положение, после того, как они закатились от С++.
Java выглядит идеально, ровно и красиво. А главное - вполне логично. Даже правила написания сходны.

Всё было понятно, ясно и чисто, код идеальный.
Что со мной не так?
Я не понимаю вашу любовь к С++.
Просто не понимаю.
Ужас.
Кошмар.
Что за битовые сдвиги вместо конкатенации строк и переменных в строку при выводе в консоль cout?
Бред вообще, ну никуда не лезет просто.
В аргумент представлю вполне логичную Java и AS3 команду вывода в консоль.
System.out.println();
trace();
В топку OpenGL. Больше никогда не открою уроки по OpenGL с его вообще аллогичными и сложными для запоминания, причём длинными функциями.

Потом, идём дальше.
Получается, в качестве аргументов функции нельзя передать, например, если это float, то нельзя передать int, и если это double, то нельзя передать ни int, ни float. Просто мозг вскипает.

По этой причине в OpenGL почти каждая, *****, функция, триплирована на 3 типа передаваемых аргументов.
Типа для примера(точно не помню, какие функции, так как запомнить их - сломать своё представление о динамическом программировании)
glSetColor3f
glSetColor3d
glSetColor3i
glSetColor4d и так далее.
Просто слов нет.
Ну хорошо, я и с этим смирюсь когда-нибудь. И тут меня мучает вопрос:
Стоит ли мучаться с ним?
Вы вообще как к нему относитесь?
Каковы ваши аргументы?
Что С++ умеет(кроме скорости), что не умеет, например, Java?
Как вы можете терпеть все эти ломающие стереотип наименования, от которых моя психика пала?

Как запомнить это всё, не подскажите методику?
По сути, даже не верится, что Flash компилируется в С++.

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

Что-то мне подсказывает, что С++ стоит учить на "чистый мозг", когда вообще не знаешь ни одного ECMAScript-подобного языка.

Один человек однажды мне сказал, когда я ещё не был знаком с синтаксисом подобному Java, что Java похожа на С++, поэтому я смогу выучить Java, если буду знать С++.
С первым он 100% фейлнулся, а вот во втором, похоже, он оказался прав. Только я хочу теперь наоборот, из синтаксиса Java перейти на C++.

Может, половина поста и бредни, но я не могу уложить в голове все эти вещи, поэтому спрашиваю у вас.

alexcon314
05.05.2014, 02:57
Вау... вот это подход.
1. Как минимум, совершенно ошибочно лезть в С++, путем сравнения с другими языками. "ах, тут какая-то непонятная хрень; ох, а зачем тут это подчеркивание : ууу.. функциональщина; ой, я не привык так строки складывать".
1.1 Неверно начинать изучать язык со сложных прикладных или системных библиотек. Там зачастую своя "кухня". Разберитесь с библиотекой самого языка (libc, libstdc++), почитайте стандарт, в конце концов.
1.2 Крайне рекомендуется изучать Си, С++ под линукс и для линукс. Это избавит вас от многих иллюзий и несварения желудка в будущем. Тем более, если держать в прицеле сетевые приложения..
2. Нужно взять и потратить время на хорошую книгу, где с чувством, с толком с расстановкой рассказывается о языке людьми, которые его понимают и знают. Для начинающего, раз уж вы заинтересовались, я бы порекомендовал Стивена Прата, его две книги, о Си и С++ (гугль по автору). Они не такие объемные (про Си вообще коротулька, но не пустышка :)), в них есть упражнения и примеры, в них нет заумных реверансов ,все по делу. Дальше уже будет легче. K&R, Страуструп...
3. С конвенциями, синтаксисом и пр. всегда так. Вас же не смущает, что в английском, нпример, не принято дважды употреблять отрицание: never say never - никогда не говори никогда. Ну, так вот оно сложилось, что, теперь английский в печь и все на китайский, ибо там иероглифы красивше? :)
4. Про любовь... Си и С++ это - эффективность, компактность, скорость и переносимость. В каждом из этих свойств с ними не может сравниться ни один язык из существующих. Я бы добавил сюда "простота", но это уже будет похоже на холивар :) Субъективно, я беспокоюсь, когда пишу код, кторый будет исполнен в какой-то непонятной виртуальной машине, которая написана фик знает кем и фик занет как и почему... мне нравится напрямую обращаться к памяти, оперировать с указателями, знать системные вызовы и как они работают...но вот такой уж я человек, видимо.
5. Из личного опыта. Я начинал с бейсика (как наверно и многие), немного пилил фортран.. потом Visual Basic с его компонентами и ООП в ультрафиолетовых тонах..потом... скрипты, флеш, одно время очень хотел заняться явой ,но не судьба, сейчас часто работаю в .NET... но всегда чего-то не доставало. Так вот. В С++ есть все, что может понадобиться программисту. Абсолютно все. И речь, собственно, не только о языке и килотоннах библиотек под него, это и культура, и окружение, и инструменты, и история, и техника...это, одним словом то мясо, которого часто не достает юным костлявым программистам :).
6. Ого, много пунктов вышло :). Сейчас могут прийти коллеги, слегка покритиковать .. не слушай их :).

Ах да, я повторю, мой пост был и остается в качестве пяти копеек, это никак не следует расценивать как призыв "все на плюсы!". Но если уж заинтересовал, то что уж..

ZackMercury
05.05.2014, 03:17
Насчёт never say never, я всегда буду любить японский, каким бы простым не был английский.
Японский - самый красивый язык из всех, что я слышал и читал. :)
Я сделаю всё, чтобы в старости говорить только на нём, и не вспоминать про ужасный "костыльный", уродливый и грубый русский :)
Насчёт коллег и критики - это всё холивары. Мне важно ваше мнение, так как вы любите С++, а не они.
На С++ написаны многие эмуляторы, и я, честно говоря, даже не понимаю, как.
Вот один хороший человек собрал команду и пишет эмулятор PSP на Android, Windows, iOS, MacOSX, и т.д.
Я как открыл его исходники, я даже не смог его нормально собрать.(возможно, не нашёл инструкции по сборке)

Спасибо за книжки, как только закончу с видеоуроками по 3D Game Programming in Java и выпущу очередной обновление своего приложения - почитаю :)

Korchy
05.05.2014, 09:55
2 SuriTheAngel

Берете каноничного Страуструпа и выучиваете от корки до корки. Тогда вы станете понимать всю мощь С++. А сейчас вы, образно говоря, научившись ездить на велосипеде резко пожелали пересесть в болид формулы-1. А здесь уже нужно гораздо больше контроля с вашей стороны, не только педали крутить. Если продолжать аналогию, Java в этом случае похож на кабриолет - красивый, удобный, но гонку на нем вы не выиграете. Но все равно, чтобы пересесть с AS на Java доучиться придется прилично.
пс. Если вам не понравился OpenGL попробуйте изучить DirectX. Его api попроще, лучше структурировано и задокументировано.

ZackMercury
05.05.2014, 12:03
пс. Если вам не понравился OpenGL попробуйте изучить DirectX. Его api попроще, лучше структурировано и задокументировано.
Я как раз задавал этот вопрос гуглу, что лучше использовать.
Наткнулся я на ответ в мейле.ру, что типа нужна и та и та.
Вот и решил познакомиться.

На Java у меня душевная радость прям писать, он очень красивый. И запоминается отлично.

Korchy
05.05.2014, 12:16
Я как раз задавал этот вопрос гуглу, что лучше использовать.
Наткнулся я на ответ в мейле.ру, что типа нужна и та и та.


Кому нужна? Зачем нужна? Вы сначала просто определитесь с задачей, тогда без всякого мейла поймете, что именно вам нужно. Что DX, что OGL - это API. Т.е всего-навсего интерфейсы - набор классов и функций. И главное отличие в них только одно - OGL вроде как специфицируется как платформонезависимое апи, т.е. каждый производитель ос должен сделать свою реализацию огл в соответствии с заданными стандартами. А д-икс - это конечно только МС. А если задача стоит "поизучать просто чтобы поизучать" - тогда без разницы, берете и изучаете.

caseyryan
05.05.2014, 13:13
Я сделаю всё, чтобы в старости говорить только на нём, и не вспоминать про ужасный "костыльный", уродливый и грубый русский :)

Чем он ужасен и "костылен"? Это один из самых красивых языков.

На Java у меня душевная радость прям писать, он очень красивый. И запоминается отлично.
Это потому что ты очень мало на нем писал. Громоздкие конструкции джавы даже у фанатов этого языка часто вызывают раздражение. Не говоря уж про то, что почти весь язык сплошь и рядом наполнен эксепшенами. Обилие try / catch блоков там и сям просто раздражает
И, видимо, ты еще не натыкался на совершенно непонятные баги в разных фреймворках, часто вызванные как раз этими try / catch (как потом выясняется)).

ну а вообще, если нравится японский и джава, а русский при этом называется костыльным и уродливым, можно сделать вывод, что ты извращенец :D

ZackMercury
05.05.2014, 13:22
Так-так...
Вы хотите сказать, что вы не любите японский?!

Насчёт Java учту :)

Насчёт того, что один из самых красивых, то вы переборщили. Даже американцы вспоминают русский как "грубый" язык.
А ужасен он тем, что не такой красивый, как японский :)
Например, в японском языке не существует отдельных согласных(кроме н, так как это в их языке слог мычания).
Это, вроде бы, единственный язык, основаный на слоговых азбуках.
П.С. Но, думаю, флудить хватит.
Если что, пишите в личку :)

caseyryan
05.05.2014, 13:28
Вы хотите сказать, что вы не любите японский?!
Терпеть не могу. Вот он как раз звучит очень грубо. И алфавиты дурацкие. Про кандзи вообще и говорить не стоит. Китайцы уже давно пытаются отказываться от них (хоть и не особо это выходит) используя алфавит на основе латиницы.
Даже американцы вспоминают русский как "грубый" язык.
А что, американцы - это какой-то эталон?! Мне лично вообще пофиг, что там считают американцы

Korchy
05.05.2014, 13:38
2 SuriTheAngel

[оффтоп]
про сравнение некоторых языков :)
http://artemg.livejournal.com/193048.html
[\оффтоп]

alexcon314
05.05.2014, 14:10
Шутки шутками, но "по-английски" программировать легче.
Почитайте как-нибудь исходники модулей 1С Бухгалтерия... вот это, я вам скажу, вынос мозга.

caseyryan
05.05.2014, 14:19
Шутки шутками, но "по-английски" программировать легче.
Почитайте как-нибудь исходники модулей 1С Бухгалтерия... вот это, я вам скажу, вынос мозга.

Плюсую на все сто! Название переменных, методов и констант, на английском даже выглядят органичнее, в структуре языка, основанного на английском.
1с это конечно вообще жесть.. для этой хрени нужен какой-то особый склад ума

morgenshtern
05.05.2014, 14:49
для этой хрени нужен какой-то особый склад ума
такой же "особый", как и для любых скриптовых языков.
Кроме того, грамотные 1С программеры в основном все операции делают в sql запросах, а язык - просто как средство разметки форм и вывода результатов.
По началу читать 1с код может ржачно, из-за русского текста. Но вы не забывайте, что для половины мира так выглядят все остальные "нормальные" языки, с английским синтаксисом.

Да и вообще, программисты не должны быть настолько сентиментальны. Язык - это просто инструмент)

А человеческие языки все слишком избыточны. Особенно письменность. Использовать определенные последовательности букв, складывать их них слова и предложения. Потом все это читать, декодировать, и складывать в мыслеформы (которые в итоге могут оказаться сомнем не теми, что закладывались при написании). Ужас.
Математические формулы (или код, да) - уже ближе к желаемой форме носителя идей, но всего ими пока них не выразить)

PainKiller
11.07.2014, 16:45
Flash компилируется в С++.
не компилируется. Возможно только наоборот С++ в flash.
Конечно пишите сервера на java, плюсы это ад, а преимущество только в скорости работы кода (зато недостаток в скорости разработки :-). И еще рекомендую посмотреть в сторону Node.js уровень сложности написания сервера тут такой C++ > Java > Node.js