Итак, начнем с того, я поставил свой проект на 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);
});
Я постараюсь обновить и улучшить свой код как можно скорее, но я думаю, что это уже открыт для всех классных вещей! Я действительно открыт для консультаций и обзоров по этому поводу, это хороший способ сделать это, ..?
Надеюсь, это поможет некоторым людям!
Ну, когда вы пишете вопрос, есть возможность «ответить на свой вопрос, поделиться знаниями Q & A style», поэтому я подумал, что мы можем делиться подобным образом, извините, если я ошибаюсь :) –
вы правы, спасибо для привлечения моего внимания :) – wakqasahmed
Привет, Jérémy, как насчет использования Redis Pub/Sub с драйвером PHP для Redis и нажатиями вещей, которые происходят в приложении PHP на канал, и в Node.js делают все, что вам нужно, слушая эти каналы? Я просто хочу знать сравнения Pub/Sub с вашим кодом. Цените свой обмен. – Maziyar