ДД всем. возможно даже тему нужно было бы назвать как-то по другому, но пока название отражает то, как мне видится проблема. вопрос в следующем: 1. есть веб-проект, написанный на php. странички там, joomla, пользователи, новости, статьи и прочая обычная шелуха. 2. но суть проекта не в обычном контенте, а в отображении специальной информации, которая: а) формируется с применением серьезного матаппарата (стат обработка и принятие решений), который на php фиг реализуешь. (в некоторых случаях предполагается использование MatLAB). разумеется, что вся эта мулька написана на совсем другом языке (конкретно на C# и С++) с применением специальных библиотек, которых в php нет и в помине. б) исходные данные для обработки берутся из MSSQL на стороннем сервере, где еще и регулярно (примерно раз в 5-15 мин) обновляются. в итоге на странице в вебе должна появляться текстово-графическая информация - результат обработки. концептуально вопрос звучит так: как реализуя php-скрипт (а может и не только php) затянуть результаты обработки из той сторонней мульки (формат затягивания пока не определен, но думаю это должен быть XML)? первое, что приходит в голову - это написание дополнительного расширения для php и реализация мульки в виде dll с последующим ее присобачиванием к php. Но: в инете на эту тему как-то не густо. Кроме того, при большом количестве обращений к этой dll мы получим и большое количество подключений к MSSQL (возможно это и можно как-то обойти, но я пока не знаю как), что не очень хорошо. в идеале, как мне видится, была бы такая картина, что мулька висит резидентно в памяти и держит постоянное подключение к MSSQL, а php передает ей запросы и получает ответы в виде XML, которые визуализирует... но это только мысли. вот такая задачка. какие будут предложения, коллеги? может я вообще не в ту сторону думаю?
1. Поднять сервер на каком нибудь порту. PHP скрипт будет ему слать запрос и получать ответ. 2. Обращаться к консольной проге через system(), exec(), etc в ответ получать имя файла с отчетом и забирать его.
не надо придумывать лишнего! скорее всего эти твои проги работают небыстро, недопустимо ждать их при формировании страницы. поэтому думать надо о формате файлов куда тупо лягут резултьтаты, а скрипт странички их разберет когда понадобится. т.е. всё "асинхронно". запускай не-пхпшные проги по расписанию.
да, про асинхронность согласен. но файлы с отчетами не подойдут имхо, ибо их просто расплодится неимоверное количество. можно подробней об этом варианте?
Я когда то использовал следующий вариант Программа генерировала файл со всеми необходимыми данными. По крону вызывался скрипт который парсил файл и выполнял необходимые действия. Думаю тебе про этот вариант говорят.
Пишите простенький сервис на том языке, на котором у вас "приблуда", сервис слушает определенный порт, принимает запросы и возвращает ответы. Я не могу быть уверен, что для вашей задачи такой вариант будет пригоден. Решать вам. Добавлено спустя 2 минуты 48 секунд: Я с C# мало знаком, но думаю поднять сервис, который будет слушать порт проблем не составит. По крайней мере на питоне делается элементарно
слушайте, мне кажется, отличный вариант, спасибо... но пока не знаю как реализовать... а как из PHP запрос по определенному порту послать?
Проще всего, наверное, http://php.ru/manual/book.curl.html Добавлено спустя 4 минуты 14 секунд: Думаю если погуглить по запросу simple tcp server c#, найдете решение.
shelestov, спасибо. буду копать в этих направлениях. Добавлено спустя 36 минут 3 секунды: Ребята, я нашел! shelestov, еще раз спасибо. вот оно мое щастье (сорри за код на C# на форуме по PHP, но все же....) Код (Text): //C# Network Programming by Richard Blum using System; using System.Net; using System.Net.Sockets; using System.Text; public class SimpleTcpSrvr { public static void Main() { int recv; byte[] data = new byte[1024]; IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newsock.Bind(ipep); newsock.Listen(10); Console.WriteLine("Waiting for a client..."); Socket client = newsock.Accept(); IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint; Console.WriteLine("Connected with {0} at port {1}", clientep.Address, clientep.Port); string welcome = "Welcome to my test server"; data = Encoding.ASCII.GetBytes(welcome); client.Send(data, data.Length, SocketFlags.None); } осталось токма из PHP нужные запросы отправить
Что на php писать дергать будет, что на C#, дергать будет. Только с C# еще и php, двойной урон скорости. А в чем собственно проблема хранить-это как логи? Можно парсить один файл. И непонятна суть задачи, что должно происходить и после чего. Пользователь, что-то выполняет, после входа или не только?
если мне память не изменяет, матмодель можно даже в JS сохранить. (по моему в симулинке во всяком случае) почитайте про php и демоны, в вашем случае наверное сервисы )
Эту инфу разве трудно вывести из того же c# и c++ в виде файла html в момент, когда ? Потом инклудить из php или вообще напрямую выдавать.