Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 01:25

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: WebSockets и SPF
СообщениеДобавлено: Ср фев 03, 2010 11:32 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 236
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
Добрый день!

позвольте представить два маленьких эксперимента с 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.


Удачи, Алексей.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 04, 2010 10:24 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 236
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
Добрый день!

3. Опыт третий. Устанавливаем в Хроме 3d плагин O3D. Поднимаем WebSocket соединение,
на клиенте (страничке) - навешиваем на ws.onmessage функцию eval.
В форт-консоле запускаем слово TEST и клавишами W A S D
крутим трехмерную модель чайника в браузере. link

Удачи.


Последний раз редактировалось Alex Пт фев 05, 2010 08:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 04, 2010 21:07 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Ой, интересно. Причем Форт тут выступает в одном из своих привлекательных качеств - управляет ворохом разного полезного кода, для которого в противном случае пришлось бы писать разные оболочки и надстройки. У меня, правда, сразу возникло два вопроса
1. Chrome - это неплохо и красиво, но как насчет IE, Opera, Firefox? Наверняка можно устроить нечто подобное с технологией, которая поддерживается всеми основными браузерами.
2. Библиотека для сокетов выглядит преимущественно основанной на вызовах API. Я не разбираюсь в сетях, потому и спрашиваю, насколько просто выделить в ней слой абстрагирования от транслятора, чтобы иметь возможность "на пальцах" объяснить, что и в каком порядке следует вызывать, чтобы получить аналогичный результат в других трансляторах.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 04, 2010 21:35 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Да, было бы интересно.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 05, 2010 08:41 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 236
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
Пока официально Chrome, слышал что идут работы в Firefox сообществе. на счет IE, Oпера не знаю даже.
НО тут такое дело что WebSockets являвется частью грядущего стандарта HTML5 и есть надежда что со
временем будут поддерживать все браузеры.

Есть альтернативные технологии - реверсивный аякс, лоонг-полинг, комет но для меня это слишком
другой мир. и не факт что позволят сделать подобное простым способом :(

Для меня библиотека сокетов из СПФ4 одна из самых используемых, а вот деталей не знаю.
Даже в этом примере можно все уложить в строк 20. Самое главное создать "слушающий" серверный
сокет и после коннекта клиента организовать ему выделение рабочего сокета.

Алексей.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 05, 2010 08:49 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
кстати, само слово "socket" переводится как "гнездо"...
Судя по всему, в смысле соединительное гнездо, а не гнездо кукушки...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 05, 2010 12:39 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Alex писал(а):
Пока официально Chrome, слышал что идут работы в Firefox сообществе. на счет IE, Oпера не знаю даже.
НО тут такое дело что WebSockets являвется частью грядущего стандарта HTML5 и есть надежда что со
временем будут поддерживать все браузеры.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 05, 2010 18:55 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 236
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
вот попалась ссылка, автор Frank Greco можно скачать pdf-ку с картинками


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 05, 2010 21:22 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
WingLion писал(а):
кстати, само слово "socket" переводится как "гнездо"...
Судя по всему, в смысле соединительное гнездо, а не гнездо кукушки...

"розетка" :(


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 10, 2010 14:21 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 236
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
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/"); )

Дельфи, фрипаскаль и многие другие имеют уже готовые компоненты
для создания серверных и обычных сокетов, и наверное спецам по ним
не составит труда сделать такие же опыты и тесты.

К сожалению не умею я обьяснять на пальцах, сам иногда себя не понимаю :)
мне кажется можно погуглить сокет+ассемблер и получить начальную инфу по сокетам.

Алексей.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 30, 2010 10:25 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 236
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
Вырезано из топика: <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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB