Итак, для начала я разместил свой проект на github, если вам нужен доступ к полному коду: https://github.com/jdutheil/nodePHP
Это очень простой пример проекта: веб-чат. У вас есть только автор и сообщение, и когда вы нажимаете отправить, оно сохраняется в базе данных mysql. Идея состоит в том, чтобы отправлять обновления в реальном времени и вести настоящую беседу. ;) Для этого воспользуемся nodeJS.
Я не буду говорить о PHP-коде, здесь он действительно простой и неинтересный; Я хочу показать вам, как интегрировать ваш код nodeJS.
Я использую express и Socket.IO, поэтому не забудьте установить эти модули с помощью npm. Затем мы создаем простой сервер nodeJS:
var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );
var app = express();
var server = http.createServer( app );
var io = socket.listen( server );
io.sockets.on( 'connection', function( client ) {
console.log( "New client !" );
client.on( 'message', function( data ) {
console.log( 'Message received ' + data.name + ":" + data.message );
io.sockets.emit( 'message', { name: data.name, message: data.message } );
});
});
server.listen( 8080 );
Мы зарегистрировали обратный вызов событий при подключении нового пользователя; каждый раз, когда мы получаем сообщение (представляет собой сообщение чата), мы транслируем его всем подключенным пользователям. А теперь самое сложное: на стороне клиента! Эта часть занимала у меня большую часть времени, потому что я не знал, какой сценарий включает возможность запуска кода Socket.IO без nodeServer (поскольку клиентская страница будет обслуживаться Apache).
Но все уже сделано; когда вы устанавливаете модуль Socket.IO с помощью npm, скрипт доступен в /node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
; что скрипт, который мы включим на нашу страницу PHP, в моем случае:
<script src="js/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="js/nodeClient.js"></script>
И, наконец, мой nodeClient.js, где мы просто подключаемся к серверу узла и ждем, пока событие обновит нашу страницу. ;)
var socket = io.connect( 'http://localhost:8080' );
$( "#messageForm" ).submit( function() {
var nameVal = $( "#nameInput" ).val();
var msg = $( "#messageInput" ).val();
socket.emit( 'message', { name: nameVal, message: msg } );
// Ajax call for saving datas
$.ajax({
url: "./ajax/insertNewMessage.php",
type: "POST",
data: { name: nameVal, message: msg },
success: function(data) {
}
});
return false;
});
socket.on( 'message', function( data ) {
var actualContent = $( "#messages" ).html();
var newMsgContent = '<li> <strong>' + data.name + '</strong> : ' + data.message + '</li>';
var content = newMsgContent + actualContent;
$( "#messages" ).html( content );
});
Я постараюсь обновить и улучшить свой код как можно скорее, но я думаю, что он уже открыт для всех интересных вещей! Я действительно открыт для советов и обзоров по этому поводу, это хороший способ сделать это, ..?
Надеюсь, это поможет некоторым людям!
У меня есть другое решение, которое мне подходит, но я хотел бы, чтобы кто-нибудь прокомментировал, насколько оно эффективно, поскольку у меня (пока) не было возможности / времени протестировать его на реальном сервере.
Вот код node-js. Я поместил этот код в файл с именем nodeserver.js:
А вот простой фрагмент кода на php, вызывающий сервер node-js с помощью file_get_contents ():
Отлично работает, когда я загружаю php-страницу, она, в свою очередь, вызывает страницу nodeserver.js, которая jsonify knall-object.
У меня есть две установки localhost, запущенные на iis на Windows 10, один стандартный php-сервер, а nodejs-server работает с аккуратным пакетом iisnode .
«Настоящий» сервер работает на ubuntu.
Я думаю, что это изящное и простое решение для связи между двумя серверами, но, может быть, у кого-то есть комментарии по этому поводу?
источник
nodejs.js
на самом деле это не исходный файл, а URL-адрес, который вы так назвали, потому что он содержит json? Первое не имеет никакого смысла, но второе мне кажется очень запутанным.Попробуйте сделать то же самое, или вы можете проверить мой блог, чтобы получить полный образец кода на nodejs
На вашей странице:
emit
функцию для отправки данных на сервер узлов.Итак, теперь ваш код будет выглядеть так
Теперь на стороне сервера Node создайте обработчик для вашего запроса, чтобы получить ваш запрос и отправить сообщение всем подключенным устройствам / браузерам (server.js)
Теперь сторона клиента / браузера / клиента заставляет приемник получать сообщение сокета от сервера узла.
источник