adrenalinik
@adrenalinik
Верстальщик

Как связать Node.js и PHP?

Допустим есть сайт на php, необходимо на ноде запустить websocket который будет реагировать на события на клиенте и передавать информацию на сервер php и обратно, как это можно реализовать?
  • Вопрос задан
  • 1661 просмотр
Решения вопроса 1
@OVK2015
Или так:
node:
var ipaddress = '127.0.0.1';
var port = 9000;
function testWebSocketServerAndNotification()
{
	var WebSocketServer = require('ws').Server;
	var path = require('path');
	var notifier = require('node-notifier');

	var message = 'Hello from Node.js';
	var path2Image = 'e:\\MyWork\\NodeWorkBench\\TestApp\\image\\infoBalloon.png';

	var wss = new WebSocketServer({host:ipaddress, port:port});

	wss.broadcast = function(data) 
	{
	  for (var i in this.clients)
	  {
	    this.clients[i].send(data);
	  }
	};

	wss.on('connection', function(ws) 
	{
	  ws.on('message', function(message) 
	  {
	    wss.broadcast(message);
		notifier.notify
		({
			title: 'My notification',
			message: `Message: '${message}'`,
			sound: true, 
			time: 5000, 
			wait: true, 
			icon: path.join(__dirname, 'image', 'notificationIcon.png'), 
			contentImage: path2Image,
		});    

	  });
	});

	console.log('Слушаем адрес ' + ipaddress + ' на порте: ' + port + ' ...');
}


php:

<?php
	require_once "e:\\MyWork\\web\\Script\\PHP\\PHP_SocketIO_Client\\socket.io.php";
	$socketio = new SocketIO();
	echo iconv("UTF-8", "CP866", "exit для выхода\n");
	while(true)
	{
		$input = fgets(STDIN);
		if(trim($input) == "exit")
		{
			break;
		}
		if ($socketio->send("127.0.0.1", 9000, iconv("CP866", "UTF-8", trim($input))))
		{
		    echo iconv("UTF-8", "CP866", "Сообщение отправлено. Можете продолжать:\n");
		} else 
		{
		    echo iconv("UTF-8", "CP866", "Какой-то сбой :(\n");
		}
	}	
	exit("Jobe done");
?>


socket.io.php брал отсюда https://github.com/psinetron/PHP_SocketIO_Client
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Redis (pub/sub), zeroMQ
Ответ написан
Комментировать
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Проще всего этим приложениям обмениваться HTTP запросами на localhost, но при большой интенсивности таких запросов, или при необходимости оптимизировать время отклика - это становится не эффективно. Тогда есть куча других средств IPC, сокеты, мьютексы и семафоры, файловая система, файлы отображаемые в память (или разделяемая память), через базу данных, через шину событий и очередь сообщений MQ системы (ZeroMQ, ActiveMQ, RabbitMQ, Redis, AMQP и т.д.). Но все эти способы не сильно улучшат ситуацию по сравнению с HTTP, потому, что PHP приложение все время завершается и стартует заново, в общем - долго не живет. При каждом запуске оно опять будет устанавливать соединение или с шиной событий или с базой или сокеты открывать к постоянно находящемуся в памяти Node.js приложению, которое живет в памяти долго. Все перечисленные способы хороши для взаимодействия двух долгоживущих приложений, которые могут установить соединение и использовать его долго, и собственную память держать долго, а через соединение просто синхронизировать состояние нескольких процессов. А в случае с PHP, обычных HTTP запросов хватит с головой, высоконагруженную системы Вы все равно не построите на связке PHP+Node.js, а вот времени сэкономите, если сделаете как можно проще.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы