Показать сообщение отдельно
Старый 16.11.2007, 14:06
komar вне форума Посмотреть профиль Отправить личное сообщение для komar Найти все сообщения от komar
  № 20  
Ответить с цитированием
komar

Регистрация: Nov 2007
Сообщений: 15
Эх. Тут в одну корзину уже накидали все что можно, даже крон приплели.
Давайте с начала.

1. Речь определенно идет о AS3, и его новом классе Socket. В AS2 его насколько я знаю нет. Отличается от XMLSocket и подобных ему, что предназначен для простого соединения с сервером без установки всяких стандартов передачи данных (как например в XMLSocket формат = XML). В классе Socket создается только сам сокет (канал с сервером), а дальше в этом канале уже делай что хочешь. (для начала просто пишешь руками HTTP запросы http://www.javable.com/columns/serv_...%3F%3F%3F+POST - кому интересно). Т.е. можно передавть данные в бинарном виде, в тексте (UTF) и т.д. Короче полная свобода.

Еще раз, XMLSocket тут вообще ни причем. Он даже работает немного по другому, и параметром у него раза в 2-3 меньше.

2. Сокет-сервер - разновидность Демона (Daemon - http://ru.wikipedia.org/wiki/%D0%94%...0%BC%D0%B0%29), как раз программа (фоновой процесс, если на уровне сервера) которая запускается на сервере (имеется ввиду машина) автоматом и слушает порт, например.

2.1 Сокет - на программном уровне - интерфейс. Т.е. набор правил и команд позволяющий клиенту (в нашем случае, в общем случае и серверу) соединяться с сервером. Т.е. модель/способ/правила/интерфейс (кому как понятнее) соединения с сервером. В данном случае открытие канал связи.
http://ru.wikipedia.org/wiki/%D0%A1%...D0%B9%D1%81%29

3. Обычные (на уровне пользователя) серверы на которых размещаются сайты, в том числе и этот, это и есть сокет-серверы. Помимо сокет-серверов есть другие типы Демонов (к ним уже относится упомянутый cron, который занимается "фоновой" планировкой и выполнением различных задач, на сколько я знаю на основе cron`ов работают различные боты, которые время от времени сканят какие-либо ресурсы = плнарование и выполнени - просто пример).

4. Апач - сокет-сервер на UNIX системе (есть различные виндовые сокет-серверы, с ними особо не знаком) настроенный на 80 конкретно. Т.е. он специально предназначен для хттп протоколов, которые являются стандартом для 80 порта. На апаче стати и ваш сайт стоит
И вот открытие страниц, например http://www.flasher.ru происходит как раз по средством сокета (канал), который открывается на 80 порту, и при обмене информации в запросах используется http протокол.

5. Т.е. апачу поверх сокет-серверы не нужен поидее. Если только появится желание заставить апач слушать не только 80 порт, а еще какой-то. То для этого порта нужно писать дополнительный сокет-сервер (надстройка, приложение например на пхп), который будет настроен именно на этот новый порт.

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

-------
Таким образом происходит типичная подмена понятий. Вообще слово "сокет" используется много где, и языках программирования и в терминологии сети и в том же АS.
-------
Речь идет о классе Socket, который из флэшки (файла swf) должен открывать сокет (канал) с сервером (апач=сокет-сервер), по определенному домену и порту (для апача это 80 порт).

О форматах передачи данных и запросах, и всем остальном пока речи не идет. Пока что все встает на этапе коннекта и открытия сокета (канал). Т.е. до скрипта к которому должен идти хттп запрос дело даже не доходит.

Все-таки думаю стоит вам посмотреть описание класса Socket.

-------
Выкладываю все-таки часть кода:
Код:
package {
    import flash.display.Sprite;
	import flash.errors.*;
	import flash.events.*;
	import flash.net.Socket;
	import flash.system.Security;

	public class SocketExample extends Sprite {
		public var my_socket:Socket;
		public var host_url:String="localhost";

		public function SocketExample() {

//			Security.allowDomain(host_url);
//			Security.loadPolicyFile("http://design.severodvinska.net/crossdomain.xml");

			my_socket = new Socket(host_url, 80);

			my_socket.addEventListener(Event.CLOSE, closeHandler);
			my_socket.addEventListener(Event.CONNECT, connectHandler);
			my_socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			my_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
			my_socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);




		}
....
код - из примера работы с классом Socket (Flash 9 Help -> class Socket)

все видим что стоят листенеры на события сокета(как канала), вот
my_socket.addEventListener(Event.CONNECT, connectHandler);

это событие не отрабатывается. Следовательно коннекта по какой причине не происходит.

Размещение всех файлов участвующих в процессе я описал. По идее все правила безопасности соблюдены.
Пример работает если его запускать из exe файла, и раотает если его запускать из среды флэша.

Также он работает на виндовом сервере IIS 6.0 и локально и удаленно.


Последний раз редактировалось komar; 16.11.2007 в 14:18.