Друзья. В реальном времени нужно получать информацию. С синхронным по своей сути php получается довольно несерьезная вещь. Начал изучать NodeJS. Но столкнулся с проблемой. Сама система работает следующим образом: Своим первым запросом клиент объявляет серверу используемую
версию протокола TCP/XML:
<proto ver="1.0"/>
Сервер сообщает, что он готов к работе по указанной версии протокола:
<proto ver="1.0">OK</proto>
Ну дальше уже так же передаем логин, пароль, что нужно получать, и команду подписки и система при получениии данных будет из отправлять нам.
Так вот в php это решатеся так:
$socket = socket_create(AF_INET, SOCK_RAW, SOL_TCP);
//AF_INET - семейство протоколов
//SOCK_STREAM - тип сокета
//SOL_TCP - протокол
$result = socket_connect($socket, $address, $port);
$msg = '<proto ver="1.0"/>';
echo "Сообщение серверу: $msg\n";
socket_write($socket, $msg, strlen($msg)); //Отправляем серверу сообщение
$out = socket_read($socket, 128); //Читаем сообщение от сервера
var_dump($out);
Но тут фишка в том что в PHP можно выбрать тип сокета raw. И ответ приходит. И подписка работает. Но к сожалению недолго. И проконтроллировать процесс отключения невозможно. Вот код на JS который, к сожалению не возвращает ответа. Я так понимаю что стучится он по telnet.
var net = require('net');
var HOST = '172.16.221.106';
var PORT = 14074;
var loopConnection = function() {
var client = new net.Socket();
client.connect(PORT, HOST, function() {
console.log('CONNECTED TO: ' + HOST + ':' + PORT);
client.write('<proto ver="1.0"/>');
});
client.on('data', function(data) {
console.log('DATA: ' + data.toString());
client.destroy();
});
client.on('close', function() {
console.log('Connection closed');
setTimeout(function() {
loopConnection(); // restart again
}, 1000); // Wait for one second
});
};
loopConnection(); // Initialize and first call loopConnection
установил raw-socket но он только создает сервер. функционала клиента в нем нет. Как быть, куда копать, что изучать?
ps за помощь скину могарыч на киви или карту =)