Как работать с Socket с Haxe / CPP

Я пытаюсь создать связь на основе сокетов с сервером с клиентом Haxe, нацеленным на CPP.

Я смотрю на sys.net.Socket, который выглядит как то, что я хочу, но все методы синхронны! Как мне дождаться серверного события?

Я привык к синтаксису узла с .on() функциями, есть ли здесь эквивалент?

Спасибо


person NorTicUs    schedule 15.09.2015    source источник


Ответы (2)


Есть два возможных решения для неблокирующего доступа к сокетам в haxe / cpp:

1) Установите сокет на неблокирующий

С помощью метода Socket.setBlocking вы устанавливаете поведение блокировки сокета. Если установлено значение true, которое является значением по умолчанию, такие методы, как socket.accept() (и, вероятно, socket.read(), но я лично не тестировал это), будут блокироваться до завершения.

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

2) Поместите сокет в отдельный поток от основного цикла

Вы можете легко создать отдельный поток для обмена данными между сокетами, чтобы затем блокирующий сокет Это хорошо. В этой модели ваш поток сокета будет отправлять данные обратно в основной поток с помощью Thread.sendMessage(), ваш основной цикл будет проверять через Thread.readMessage(block:Bool), есть ли новые данные из сокета.

person Jeff Ward    schedule 16.09.2015
comment
Это может быть то, что мне нужно! Я видел фрагмент с read() в while(true) цикле. Это то, что делает ваша ветка? - person NorTicUs; 16.09.2015
comment
Правильно, в цикле while с блокировкой, установленной на false, и попыткой / перехватом read () вы можете делать все, что захотите, без блокировки сокета. - person Jeff Ward; 16.09.2015
comment
Отлично работает! Я просто приведу небольшой пример потока, потому что в документации не очень ясно, как их использовать: http://webcache.googleusercontent.com/search?q=cache:http://www.joshuagranick - person NorTicUs; 17.09.2015

Исторически hxcpp и async - сложная задача, поскольку нет основного цикла hxcpp из коробки, поэтому задача практически всегда откладывается на набор инструментов (openfl, nme и т. Д.)

AFAIK нет готового решения, привязка http://zeromq.org/ может быть прямой и легкой задачей. подумал.

Вы также можете отложить реализацию HTTP, упакованную с вашим любимым набором инструментов.

Удачи !

person blackmagic    schedule 15.09.2015