javascript — объединяет узел js и сокет ввода-вывода с codeigniter

Как я могу интегрировать node.js и сокет ввода-вывода в воспламенитель кода.

 <script>

// create a new websocket
var socket = io.connect('http://localhost:8000');
// on message received we print all the data inside the #container div
socket.on('notification', function (data) {
var usersList = "<dl>";
$.each(data.users,function(index,user){
usersList += "<dt>" + user.user_name + "</dt>\n" +
"<dd>" + user.user_description + "\n" +
"<figure> <img class='img-polaroid' width='50px' src='" + user.user_img + "' /></figure>""</dd>";
});
usersList += "</dl>";
$('#container').html(usersList);

$('time').html('Last Update:' + data.time);
});
</script>

Как уже упоминалось в этом вопросе Вот. Мой файл просмотра с codeigniter находится в localhost/myproject но nodejs слушает порт, используя localhost:8000, Так как я могу подключиться socket IO, подобно

 var socket = io.connect('http://localhost:8000');
//here I need to make socket IO listen to localhost/myproject instead of localhost:8000 .

Как это возможно?

17

Решение

Я думаю, вы неправильно понимаете, как работает socket.io. Вы никогда не слушали бы свое мнение о КИ. Вы всегда будете отправлять сообщения (и получать сообщения) с сервера NodeJS через порт 8000. Представления Codeigniter просто статичны, и нет никаких причин «слушать» его, поскольку он будет загружаться только один раз.

Ключевой момент от тот ответ, на который вы ссылались:

пользователи будут использовать URL-адрес codeigniter, и при открытии страницы у меня есть этот скрипт на странице просмотра CI, которая подключается к моему приложению Nodejs

Поэтому вы загружаете свой браузер с представлением CI, а затем прослушиваете события с сервера NodeJS через JavaScript в вашем представлении CI.

Затем вы также можете отправлять события на сервер NodeJS из JavaScript в представлении CI.

3

Другие решения

Используйте Dnode, это асинхронная RPC-система для node.js, которая заставляет его общаться с php (и наоборот) напрямую (со стороны php вы можете вызывать свой контроллер codeigniter)

Я недавно написал сообщение об этом

https://www.linkedin.com/pulse/make-php-nodejs-talk-each-other-serdar-senay

В уроке, написанном для dnode его основателем, есть какой-то устаревший код, поэтому используйте пример кода в моем посте с кодом мыши, также приведенном ниже (с лучшим форматированием, чем у linkedin):

require ('vendor/autoload.php');
$loop = new React\EventLoop\StreamSelectLoop();
// Connect to DNode server running in port 7070 and call argument with Zing 33
$dnode = new DNode\DNode ($loop);
$dnode-> connect (7070, function ($remote, $connection) {
// Remote is A That Provides Proxy object Methods us all from the Server
$remote-> zing(33, function ($n) Use ($connection) {
echo "n = {$n}\n";
// Once We Have the Result We Can close the connection
$connection->end();
});
});
$loop-> Run();
3

Вот поток, который вы хотите достичь:

1) Настройка сервера node.js с сокетами socket.io (.on). Если вы хотите, чтобы node.js работал через сокет 80, обратите внимание на переадресацию с порта iptables 80 на порт 3000.

2) Добавьте клиента socket.io в проект средства воспламенения кода. Вы будете использовать это для создания начального соединения с соединением node.js / socket.io в CI View.

3) Настройте различные события в представлении, чтобы инициировать отправку на сервер, а также то, что должно происходить при получении сообщения сокета. То есть: нажмите кнопку, чтобы добавить элемент на страницу, он отправит его на сервер, и тогда у вас может получиться, что клиент получит сообщение от сервера и обновит представление так, чтобы оно было текущим.

1

Вы можете напрямую связать файл socket.io.js в представлении codeigniter.

<script type='text/javascript' src='http://localhost:8000/socket.io/socket.io.js'></script>

тогда вы сможете установить соединение с сервером nodejs из http://localhost/myproject

 var socket = io.connect('http://localhost:8000');

Тем не менее, таким образом, вы будете делать весь код на стороне клиента в представлении codeigniter. Если вы хотите использовать механизм шаблонов nodejs для отправки html-страниц в браузер, вы можете изменить порт сервера node.js на 80.

1
По вопросам рекламы [email protected]