Интегрируйте node js и socket IO с помощью codeigniter
Как я могу интегрировать node.js и сокет IO в воспламенителе кода.
<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>
Как упоминается в этом вопросе SO здесь. Мой файл с именем 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 .
Как это возможно?
Ответы
Ответ 1
Я думаю, вы не понимаете, как работает socket.io. Вы никогда не будете слушать свой взгляд на CI. Вы всегда будете отправлять сообщения (и получать сообщения от) сервера NodeJS на порт 8000. Представления Codeigniter просто статичны, и нет никаких причин "слушать" его, поскольку он будет загружаться только один раз.
Ключевой момент из на который вы ссылаетесь:
пользователи будут использовать URL-адрес codeigniter, а при открытии страницы у меня есть этот script на моей странице просмотра CI, которая подключается к моему приложению Nodejs
Таким образом, вы загружаете свой браузер в представление CI, а затем слушаете события с сервера NodeJS через JavaScript в своем представлении CI.
Затем вы можете также нажимать события на сервер NodeJS из JavaScript в вашем представлении CI.
Ответ 2
Используйте Dnode, это асинхронная RPC-система для node.js, которая заставляет его напрямую разговаривать с php (и наоборот) (php-сторона, которую вы можете вызвать на вашем кодеигниторном контроллере)
Недавно я написал связанный пост об этом
https://www.linkedin.com/pulse/make-php-nodejs-talk-each-other-serdar-senay
В учебнике, написанном для dnode его основателем, есть какой-то устаревший код, поэтому используйте образец кода в моей статье linkin, также сбрасываемый ниже (с лучшим форматированием, чем связанный):
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.
3) Настройте различные события в представлении, чтобы инициировать выбросы на сервер, а также то, что должно произойти при получении сообщения сокета. т.е.: нажмите кнопку, чтобы добавить элемент на страницу, он будет выдаваться на сервер, а затем вы можете получить клиентское сообщение от сервера и обновить представление так, чтобы его текущий.
Ответ 4
вы можете напрямую связать 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.