Forth http://fforum.winglion.ru/ |
|
WebSockets и SPF http://fforum.winglion.ru/viewtopic.php?f=18&t=2417 |
Страница 1 из 1 |
Автор: | Alex [ Ср фев 03, 2010 11:32 ] |
Заголовок сообщения: | WebSockets и SPF |
Добрый день! позвольте представить два маленьких эксперимента с WebSockets. link WebSockets позволяет устанавливаать длительно существующее двунаправленное соединение между браузером и вебсервером. Попробуем поиграть и посмотреть. 1. Опыт первый. попробуем сделать веб-консоль для SPF4. В библиотеках находим маленький веб сервер от Дмитрия Якимова. Доработаем его для WebSockets для этого если получаем от браузера запросы вида: GET / HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: example.com Origin: http://example.com Должны ответить так: HTTP/1.1 101 Web Socket Protocol Handshake Upgrade: WebSocket Connection: Upgrade WebSocket-Origin: http://example.com WebSocket-Location: ws://example.com/demo И вот теперь мы имеем сокет по которому мы можем гонять байты, каждый пакет отправляемых/принимаемых данных в простейшем случае должен начинаться байтом 0x00 и завершаться байтом 0xFF ну и кодировка должно быть UTF-8, но пока будем отправлять/принимать только латиницу. далее находим в старых либах реализацию телнет-сервера на SPF4, и передираем оттуда рабочий цикл по получению байтов из сокета, подмену TYPE для вывода в сокет ну и сам рабочий цикл INTERPRET. Так серверная сторона готова, теперь что надо сделать на клиенте-браузере. прежде всего на страничке надо обьявить WebSocket, например так var ws; function init() { ws = new WebSocket("ws://localhost:80/"); ws.onopen = function(e) { } ws.onclose = function(e) { } ws.onmessage = function(e) {document.myform.sys.value += e.data;} }; еще надо создать TEXTAREA где будем делать ввод и вывод: <body onload="init();"> <form name=myform > <TEXTAREA NAME="sys" onKeyUp=ws.send(String.fromCharCode(event.which)); COLS=80 ROWS=25></TEXTAREA> </form> </body> Ну вот и все набросок готов, когда мы нажимаем клавишу в текстареа, символ отправлется функций ws.send нашему WebSocket серверу, а получаемый ответ функцией ws.onmessage добавляется в текстареа. Итак мы получили консоль форта на страничке. Кроме того новый инструмент, новую возможность в построениии интерфейса к форт-программам. Сейчас пока WebSocket поддерживает Хром, завтра наверняка будет поддержка в ФайрФоксе а мы потихоньку готовимся использовать это в своих программах и системах Очень хорошо, что наш веб-сервер отрабатывает и обычный HTTP запрос и держит WebSocket , можно представить себе некую web IDE для форта: страничка с фреймама, в одном фрейме форт-консоль, в другом рядышком HTML help, рядышком дампы стеков , дизасм - ведь были у нас желающие - не перегорели? 2. Опыт второй. Мы поднимаем WebSocket соединение, на клиенте (страничке) - навешиваем на ws.onmessage функцию eval. теперь все что придет от нашего сервера будет интерпретироваться браузером. создадим на страничке элемент canvas и попробуем порисовать на нем выдавая соответствующие команды. Команды будем выдавать из нашей родной форт-консоли, а сокет у нас поднят в другом потоке, значит нужен некоторый механизм передачи строки из одного потока в другой здесь в примере через семафор ( не пинайте сильно ) Команды для прорисовки запишем в файлы f1, f2, f3. Например содержимое f2: ctx.fillStyle = "rgb(0,200,0)"; ctx.fillRect(150,150,50,50); ctx.fillStyle = "rgb(250,250,0)"; ctx.fillRect(200,200,50,50); это значит на canvas ctx нарисуем два квадрата зеленый и желтый. а в консоле для отправки в браузер наберем " f2" ws! Здесь в примере главное то, что мы в произвольный момент времени выводим информацию в браузер по инициативе сервера ! В перспективе в браузерах реализуют стандарт WebGL и мы сможем рисовать 3D. Удачи, Алексей. |
Автор: | Alex [ Чт фев 04, 2010 10:24 ] |
Заголовок сообщения: | |
Добрый день! 3. Опыт третий. Устанавливаем в Хроме 3d плагин O3D. Поднимаем WebSocket соединение, на клиенте (страничке) - навешиваем на ws.onmessage функцию eval. В форт-консоле запускаем слово TEST и клавишами W A S D крутим трехмерную модель чайника в браузере. link Удачи. |
Автор: | Hishnik [ Чт фев 04, 2010 21:07 ] |
Заголовок сообщения: | |
Ой, интересно. Причем Форт тут выступает в одном из своих привлекательных качеств - управляет ворохом разного полезного кода, для которого в противном случае пришлось бы писать разные оболочки и надстройки. У меня, правда, сразу возникло два вопроса 1. Chrome - это неплохо и красиво, но как насчет IE, Opera, Firefox? Наверняка можно устроить нечто подобное с технологией, которая поддерживается всеми основными браузерами. 2. Библиотека для сокетов выглядит преимущественно основанной на вызовах API. Я не разбираюсь в сетях, потому и спрашиваю, насколько просто выделить в ней слой абстрагирования от транслятора, чтобы иметь возможность "на пальцах" объяснить, что и в каком порядке следует вызывать, чтобы получить аналогичный результат в других трансляторах. |
Автор: | VoidVolker [ Чт фев 04, 2010 21:35 ] |
Заголовок сообщения: | |
Да, было бы интересно. |
Автор: | Alex [ Пт фев 05, 2010 08:41 ] |
Заголовок сообщения: | |
Пока официально Chrome, слышал что идут работы в Firefox сообществе. на счет IE, Oпера не знаю даже. НО тут такое дело что WebSockets являвется частью грядущего стандарта HTML5 и есть надежда что со временем будут поддерживать все браузеры. Есть альтернативные технологии - реверсивный аякс, лоонг-полинг, комет но для меня это слишком другой мир. и не факт что позволят сделать подобное простым способом Для меня библиотека сокетов из СПФ4 одна из самых используемых, а вот деталей не знаю. Даже в этом примере можно все уложить в строк 20. Самое главное создать "слушающий" серверный сокет и после коннекта клиента организовать ему выделение рабочего сокета. Алексей. |
Автор: | WingLion [ Пт фев 05, 2010 08:49 ] |
Заголовок сообщения: | |
кстати, само слово "socket" переводится как "гнездо"... Судя по всему, в смысле соединительное гнездо, а не гнездо кукушки... |
Автор: | Hishnik [ Пт фев 05, 2010 12:39 ] |
Заголовок сообщения: | |
Alex писал(а): Пока официально Chrome, слышал что идут работы в Firefox сообществе. на счет IE, Oпера не знаю даже.
НО тут такое дело что WebSockets являвется частью грядущего стандарта HTML5 и есть надежда что со временем будут поддерживать все браузеры. Я бы с удовольствием почитал развернутые комментарии по сокетам "для чайников", если есть возможность их написать. |
Автор: | Alex [ Пт фев 05, 2010 18:55 ] |
Заголовок сообщения: | |
вот попалась ссылка, автор Frank Greco можно скачать pdf-ку с картинками |
Автор: | вопрос [ Пт фев 05, 2010 21:22 ] |
Заголовок сообщения: | |
WingLion писал(а): кстати, само слово "socket" переводится как "гнездо"...
Судя по всему, в смысле соединительное гнездо, а не гнездо кукушки... "розетка" |
Автор: | Alex [ Ср фев 10, 2010 14:21 ] |
Заголовок сообщения: | |
4. Опыт четвертый скачать архив - запускаем в консоле inetd.exe 4015 sss.exe - запускаем в другой консоли в папке web программу spf4.exe wserver.f - открываем в хроме страницу http://localhost/ если примерно через 3 секунды увидим черный квадрат - опыт успешен. попробую обьяснить что и как мы получили и ответить на вопрос: >2. Библиотека для сокетов выглядит преимущественно основанной на вызовах API. > Я не разбираюсь в сетях, потому и спрашиваю, насколько просто выделить в ней > слой абстрагирования от транслятора, чтобы иметь возможность "на пальцах" > объяснить, что и в каком порядке следует вызывать, чтобы получить аналогичный > результат в других трансляторах. > ~~~~~~~~~~~~~~~~~~~ Что делает программа sss.exe? ( исходный текст в файле sss.f ) Она просто печатает ( или иными словами отправляет на стандартный вывод ) вебсокет-отклик и спустя 2 секунды отправляет команду отрисовки черного квадрата затем завершает свою работу, стандартный ввод игнорируется. Что делает программа inetd.exe? это тсп-демон, который связывает входящее по тсп соединение (сокет) с stdin/stdout программы sss.exe Таким образом мы видим, что любая программа имеющая стандартный ввод/вывод теоретически может взаимодействовать с браузером через вебсокет программа spf4.exe wserver, это простейший веб-сервер, отдающий страницы браузеру, вместо него может быть и апач, и IIS, все что угодно. на странице index.html в функции init мы при создании вебсокета указываем на наш демон inetd ( ws = new WebSocket("ws://localhost:4015/"); ) Дельфи, фрипаскаль и многие другие имеют уже готовые компоненты для создания серверных и обычных сокетов, и наверное спецам по ним не составит труда сделать такие же опыты и тесты. К сожалению не умею я обьяснять на пальцах, сам иногда себя не понимаю мне кажется можно погуглить сокет+ассемблер и получить начальную инфу по сокетам. Алексей. |
Автор: | Alex [ Вт мар 30, 2010 10:25 ] |
Заголовок сообщения: | |
Вырезано из топика: <Quark 2 : пробы на Qt> Alex: Мне тоже нравится такой подход, в своих экспериментах с WebSockets я пробую делать нечто аналогичное, на первый запрос от браузера , сервер отдает страницу-пустышку состоящую из элемента canvas, и далее форт-машина отправляет необходимые команды для отрисовки на нем графических элементов. На текущий момент это javascript текст... Forther: А можно таким же образом интерактивную SVG картинку динамически строить? Да, можно. необходимо работать напрямую с DOM браузера. Вот в архиве пример. браузер - последний Chrome. 1. запускаем форт spf4.exe ws.f 2. запускаем Chrome и набираем адрес http://localhost/index.html 3. если появилась рамка, отлично, набираем в форт-консоле tst, если теперь кликнуть на желтом круге, в форт-консоле можно увидеть ответ от браузера. index.html - пустой svg фрейм и некоторые магические штучки, в файле _tst находятся сами команды, которые отправляются словом tst, по аналогии можно пробовать описывать и другие элементы. В качестве бонуса, можно запустить несколько экземпляров Chrome и еще разок попробовать tst |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |