Как я могу интегрировать 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 .
Как это возможно?
Я думаю, вы неправильно понимаете, как работает socket.io. Вы никогда не слушали бы свое мнение о КИ. Вы всегда будете отправлять сообщения (и получать сообщения) с сервера NodeJS через порт 8000. Представления Codeigniter просто статичны, и нет никаких причин «слушать» его, поскольку он будет загружаться только один раз.
Ключевой момент от тот ответ, на который вы ссылались:
пользователи будут использовать URL-адрес codeigniter, и при открытии страницы у меня есть этот скрипт на странице просмотра CI, которая подключается к моему приложению Nodejs
Поэтому вы загружаете свой браузер с представлением CI, а затем прослушиваете события с сервера NodeJS через JavaScript в вашем представлении CI.
Затем вы также можете отправлять события на сервер NodeJS из JavaScript в представлении CI.
Используйте 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();
Вот поток, который вы хотите достичь:
1) Настройка сервера node.js с сокетами socket.io (.on). Если вы хотите, чтобы node.js работал через сокет 80, обратите внимание на переадресацию с порта iptables 80 на порт 3000.
2) Добавьте клиента socket.io в проект средства воспламенения кода. Вы будете использовать это для создания начального соединения с соединением node.js / socket.io в CI View.
3) Настройте различные события в представлении, чтобы инициировать отправку на сервер, а также то, что должно происходить при получении сообщения сокета. То есть: нажмите кнопку, чтобы добавить элемент на страницу, он отправит его на сервер, и тогда у вас может получиться, что клиент получит сообщение от сервера и обновит представление так, чтобы оно было текущим.
Вы можете напрямую связать файл 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.