Node.js + codeigniter - PullRequest
       2

Node.js + codeigniter

12 голосов
/ 13 апреля 2011

Недавно читал о Node.js и о том, как он отличный веб-сервер и поддерживает даже сокеты.Я думал об использовании его в моем проекте, но я все еще не смог выяснить, как взаимодействовать с CI для node.js.Был разработан проект для Drupal, и он, кажется, работает хорошо, однако я все еще не могу понять, как они интегрировали его вместе.

Просто интересно, есть ли у кого-нибудь опыт с этой идеей.

http://drupal.org/project/nodejs

http://www.youtube.com/watch?v=UV8lbdJfESg

Пример:

Пользователь публикует комментарий через AJAX. Комментарий получает хранилище в БД. Все пользователи, просматривающие ветку, получают уведомление

теперь в той части, где после его отправки комментарий и уведомлениеКак MSG отправляется на node.js

Ответы [ 4 ]

18 голосов
/ 13 апреля 2011

node.js - это неблокирующая библиотека ввода-вывода, которую можно использовать в качестве веб-сервера.

Code Igniter - это PHP-фреймворк.

Хотите ли вы запустить веб-сервер node.js рядом с вашим PHP-веб-сервером и заставить их общаться друг с другом?

Я бы порекомендовал вам сделать одно или другое.Перепишите весь свой веб-сайт в express и сейчас .

Если они должны общаться друг с другом, вы можете легко открыть TCP-сокет в узле с помощью net.

var net = require('net');

var server = net.createServer(function (socket) {
  socket.write("Echo server\r\n");
  socket.pipe(socket);
})

server.listen(8124, "127.0.0.1");

Затем просто используйте fsockopen в PHP для подключения к узлу через сокет TCP.

Редактировать:

Комментарии в реальном времени полностью независимы от CI.Вам просто нужно иметь некоторое количество кода socket.io на страницах вашего CI-сервера.Ваши страницы общаются с node.js через отдельный сокет и никогда не касаются серверной части PHP.Ваш socket.io отправит данные всем вашим клиентам, и на страницах появятся новые сообщения с javascript.

Все, что нужно сделать codeigniter, это вставить

<script src="url/socket-io.js" />
<script src="url/myChat.js" />

Дальнейшее редактирование:

Таким образом, вам нужно, чтобы ваш пользователь вошел через веб-сокет.Я не уверен, как они сейчас входят в систему, но отправка того же хеша имени пользователя и пароля в node.js не должна быть слишком сложной.Получите node.js, чтобы открыть соединение с вашей базой данных, где вы храните пользователей.Затем сохраните в базе данных каналы / темы / чаты / сообщения, на которые конкретный пользователь «подписан».

Затем, когда узел получает сообщение от «канала», он просто запрашивает у базы данных, каких пользователей нажать на него.сообщение, а затем отправляет его.

Я ответил на аналогичный вопрос о написании сервера чата с использованием узла, и видеоурок теперь имеет хороший пример.Вы сможете легко превратить «чат в нескольких комнатах» в «комментирование нескольких потоков».

Дальнейшее дальнейшее редактирование

Не публиковать на URL comment/add/ когда вы нажимаете добавить.Не используйте ajax.Вместо этого используйте socket.io.

Так что-то вроде:

// on the client side
$("#add").click(function() {
    socket.send("add" + user.toJSON());
});

socket.on("message", function(m) {
    if (/^new/.test(m)) {
         var post = m.substring(3);
         $("#comments").append($("<div></div>").text(post));
    }
});

// on the server side
var socket = io.listen(server); 
socket.on('connection', function(client){ 
    // new client is here! 
    client.on('message', function(m){ 
        if (/^add/.test(m)) {
             client.broadcast("new"+m.substring(3));
        }
    }); 
}); 

Поэтому просто клиент отправляет сообщение «добавить комментарий», когда вы нажимаете кнопку добавить.Сервер прослушивает сообщение о добавлении и передает сообщение всем другим клиентам.Эти клиенты уже прослушивают новое сообщение, а новый добавляет комментарий.

2 голосов
/ 27 апреля 2012

То, как это сделал Drupal, - это использование плагина Node.js Socket.io. Когда комментарий публикуется, drupal уведомляет сокет с деталями комментария, затем node.js уведомляет других «клиентов».

1 голос
/ 13 апреля 2011

Я думаю, что в общем случае использования node.js с CodeIgniter, между ними не будет прямой связи.

В примере, который вы описали выше, это может быть выполнено с помощью метода "long polling" с node.js.(http://blog.nemikor.com/2010/05/21/long-polling-in-nodejs/)

По сути, ваша клиентская сторона AJAX будет делать запрос к вашему серверу node.js. Этот запрос на сервере node.js будет запускать процесс, который каждую секунду проверяет вашу БД на наличие новых комментариев (или5 секунд и т. Д.) Когда он находит новый комментарий, он возвращает его в качестве ответа на вызов JJ AJAX на стороне клиента, и ваш JS будет обрабатывать его оттуда.

Это один подход, в котором узел.js и CodeIgniter могут быть объединены.

ПРИМЕЧАНИЕ: Node.js очень хорош для длинных опросов, потому что вы можете поддерживать много запросов одновременности с одного сервера node.js, благодаря неблокируемой конструкции на основе цикла событийof node.js

0 голосов
/ 31 мая 2016

Я только что нашел этот пакет:

NodeigniterMVC - инфраструктура MVC для node.js, вдохновленная Codeigniter. Это позволяет настраивать маршрутизацию, связывание и частичное отображение вида; встроенный с помощниками, библиотеками и CLI. Полностью совместим с Бауэр.

https://www.npmjs.com/package/nodeignitermvc

Итак, насколько я понял, это пакет, который запускается с unde NODE.JS, если вы еще не запустили свой проект и хотите, чтобы оба проекта не доставляли вам особых проблем, играя с сокетами на вашем сервере - это выглядит идеально.

может быть, это помогает :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...