Recommended Posts

здравствуйте, надеюсь выбрал тему верно, так вот ...

на хостинге установили node открыли порт 3000 порт прослушивается, при обращении lptf.it:3000 или http://185.53.160.215:3000/ выводится сообщение Hello Node.js Server!. Казалось бы все хорошо! но! я хочу дальше создание чата, и в корне сайта создаю файлик (сервер) с кодом (пример с интернета, я новичОк):

var express = require('express');
    var app = express();
    app.set('port', process.env.PORT || 3000);
    app.set('host', process.env.HOST || 'localhost');
    
    var logger = require('log4js').getLogger();
    var server = require('http').Server(app);
    var io = require('socket.io')(server);
    var port = 3000;


     app.use(express.static('/home/urlyogyj/public_html/views/chat.php'));
    app.get('/chat.php', function(req,res){
    res.sendFile('/home/urlyogyj/public_html/views/chat.php');
    });

    app.use('/fonts', express.static('/home/urlyogyj/node_modules/uikit/src/fonts/'));

     app.get('/socket.io.js', function(req,res){
    res.sendFile('/home/urlyogyj/node_modules/socket.io-client/dist/socket.io.js');
    });

    app.get('/jquery.js', function(req,res){
    res.sendFile('/home/urlyogyj/node_modules/jquery/dist/jquery.min.js');
     });

     app.get('/uikit.js', function(req,res){
    res.sendFile('/home/urlyogyj/node_modules/uikit/dist/js/uikit.min.js');
    });

    app.get('/uikit.css', function(req,res){
    res.sendFile('/home/urlyogyj/node_modules/uikit/dist/css/uikit.almost-flat.min.css');
    });

    app.get('/animate.css', function(req,res){
    res.sendFile('/home/urlyogyj/node_modules/animate.css/animate.min.css');
    });

    function usersCountToLog(){
    logger.info('User count: '+io.engine.clientsCount);
     }

     io.on('connection', function(socket){

    function setName(name){
        if(name != undefined && name != ''){
            socket.session = {};
            socket.session.userName = name;
            socket.session.address = socket.handshake.address; 
            socket.session.id = socket.id;          
            
            socket.broadcast.emit('newUser', socket.session);
            socket.emit('userName', socket.session);
            

            socket.emit('userList', io.length);

            logger.info('User '+socket.session.userName+' join from IP: '+socket.session.address);
            usersCountToLog();
            var clients = io.sockets.connected;


            var clientsList = {}
            for(var key in clients){
                if(clients[key].session)
                    clientsList[key] = clients[key].session;
            }
            
            socket.emit('clientsList', clientsList);
            console.log(clientsList);
        }
        else
            socket.emit('setName');
    }
    setName(null);
    socket.on('setName', function(name){
        if(name.length > 0)
            setName(name);
        else
            socket.emit('setName');
    });

    socket.on('message', function(msg){
        if(socket.session){
            if(socket.session.userName === null || socket.session.userName == '' || socket.session.userName == undefined){
                socket.emit('setName');
            }else{
                logger.trace('———--');
                logger.trace('User: ' + socket.session.userName + ' |  
    Message: ' + msg);
                logger.trace('====> Sending message to other chaters...');

                socket.broadcast.emit('messageFromClients', msg,  
    socket.session.userName);
                socket.emit('messageToClients', msg,      
    socket.session.userName);
            }
        }
    });

    socket.on('disconnect', function(){
        if(socket.session){
            io.sockets.emit('userDisconnected', socket.session);
            logger.info('User '+socket.session.userName+' left chat');
            usersCountToLog();
        }
    });
    });

    console.log('server started, tipa...');

как видно по коду прописал адреса к файлам, они верные, в консоле перезапускаю сервер командой

    node /home/urlyogyj/public_html/app.js screen


после этого обновляю адрес lptf.it:3000 и все равно без перемен, выводит Hello Node.js Server!
я не понимаю почему, и где и как можно отслеживать ошибки.
чего вообще хочу добиться:
до авторизации какого-либо пользователя чат не нужен, как только пользователь авторизовывается на сайте, открывается сокет и на сайте для всех остальных пользователей и гостей видна надпись что тот авторизованный пользователь в сети, и напротив его логина появляется кнопка создать чат, но только для авторизованых пользователей, при нажатии на нее открывается окошко чата, как на сайте вконтакте или фейсбуке, у получателя сообщения есть блок со списком все кто прислал ему сообщение, получатель нажимает на автора и пользователи начинают общение, каждый диалог с новым пользователь должен запускать свое окошко чата. причем этот чат существует на всех страницах сайта. после выхода пользователя через кнопку выход или закрытии вкладки сокет закрывается, а все сообщения записываются в базу данных!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By daggi
      Всем привет.
      При клике (добавляю active к label) делает активными все элементы, а не текущий? Как быть?
       
      $(document).on('change', '.compare-control', function(){ var id = $(this).val(); var url = '/?action=DELETE_FROM_COMPARE_LIST&ajax_action=Y&id='+id; if ($(this).prop('checked')) { url = '/?action=ADD_TO_COMPARE_LIST&ajax_action=Y&id='+id; } $.get(url, function() { BX.onCustomEvent('OnCompareChange'); }); // здесь беда!!!при клике на элемент, делает элементы все активными, а не текущий. if($('.catalog-content-main-item-top-fav').hasClass('active')) { $('.catalog-content-main-item-top-fav').removeClass('active'); }else{ $('.catalog-content-main-item-top-fav').addClass("active"); } }); BX.addCustomEvent('onCatalogDeleteCompare', function(id) { $('.compare-control[value="'+id+'"]').prop('checked', false); }); Код html:
      <label class="catalog-content-main-item-top-fav <?= array_key_exists($arItem['ID'], $_SESSION["CATALOG_COMPARE_LIST"][5]['ITEMS'])?'active':''?>" > <input onclick="function f(e) { e.preventDefault();}" style="display: none" type="checkbox" value="<?=$arItem['ID'];?>" class="compare-control" <? if(isset($_SESSION['CATALOG_COMPARE_LIST']['5']['ITEMS'][$arItem['ID']])):?> checked="checked" <? endif;?>> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> <path d="M12.2536 19.2043L12 19.055L11.7464 19.2043L5.28009 23.0103L6.73156 15.3278L6.78144 15.0638L6.58881 14.8765L1.09502 9.53481L8.50172 8.61114L8.7836 8.57598L8.89772 8.31586L12 1.24455L15.1023 8.31586L15.2164 8.57598L15.4983 8.61114L22.905 9.53481L17.4112 14.8765L17.2186 15.0638L17.2684 15.3278L18.7199 23.0103L12.2536 19.2043Z" fill="white" stroke="#E09B3D"/> </svg> </label> а этот код срабатывает только после перезагрузки страницы:  <?= array_key_exists($arItem['ID'], $_SESSION["CATALOG_COMPARE_LIST"][5]['ITEMS'])?'active':''?>
       
    • By VolKTieR
      Здравствуйте.
      Имеется данный код:
      <audio id="audio">     <source src="audio/1.mp3" type="audio/mpeg"> </audio> <div class="fixedbut" id="sebut">Звук</div> <style> div.fixedbut { position: fixed;     bottom: 93%;     right: 20px;      display: block;      background: white;      border-radius: 10px;     color: black;      text-decoration: none;      padding: 6px 23px;     font-size: 17px ;     -webkit-transition: 0.33s all ease-out;      -o-transition: 0.33s all ease-out;      transition: 0.33s all ease-out;     z-index: 999; } div.fixedbut:hover {         background: grey;         color: white; } </style> <script> document.getElementById("sebut").onclick = function()     {       var myaudio = document.getElementById("audio");       if(myaudio.paused == true)       {         document.getElementById("audio").play();  }       else if (myaudio.paused == false)       {         document.getElementById("audio").pause(); }     } </script> <script>     $(document).ready(function(){       $(window).scroll(function () {         if ($(this).scrollTop() > 200)          {             $('div.fixedbut').fadeIn();        }         else          {             $('div.fixedbut').fadeOut();         }   })     }); </script>
       
      Кнопка плавающая, останавливает звук включенный другой .
      Со звуком проблем нет, но появление и исчезание кнопки при прокрутке не работает.
      Подскажите пожалуйста как сделать))
    • By Nathman999
      В #topmenu есть 4 прямоугольника-ссылки:"Основное","HTML","CSS","Сайт"
      Ссылки выглядят примерно так: http://htmlbook.ru/#main 
      Хотя если на них нажать никаких переходов не происходит(по крайней мере в адресной строке хрома ничего не меняется).
      Но панель под этими прямоугольниками меняется. А именно одна из 4-х панелей становится видимой(display: block;).
      Объясните пожалуйста как реализована такая технология.
  • Member Statistics

    46,614
    Total Members
    3,128
    Most Online
    PPPoison
    Newest Member
    PPPoison
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Спрашивают сейчас

  • Пишут сейчас

    • сделал класс narrow чтобы уменьшить ширину, но на место не возвращается блок читал что ширина сетки 960px, а в шаблоне ширина 1140px
    • Потому что 1-й блок не имеет отступа слева. А 4-й имеет, из-за чего доступная область на втором рже меньше.
      В связи с этим последний блок "перескочил" на следующую строку только потому, что ему не хватает места.
    • <div id="openModal" class="modalDialog"> <div> <a href="#close" title="Закрыть" class="close">X</a> <h2>Обратная связь</h2> <form name="MyForm" action="#openModal" method="post"><br> <input name="name" style="width: 420px" type="text" placeholder="Ваши фамилия, имя, отчество" /><br> <input name="tel" style="width: 420px" type="tel" placeholder="Ваш номер телефона" /><br> <input name="email" style="width: 420px" type="email" placeholder="Ваша электронная почта" /><br> <textarea name="body" style="width: 420px" placeholder="Ваше сообщение"></textarea><br> <br>Нажимая на кнопку "Отправить", я даю согласие на обработку своих персональных данных в соответствии с <a href="politika.htm" target="_blank">Политикой конфиденциальности</a><br> <p style="text-align: center"><input type="submit" value="Отправить" id="btnpng4" /></p> </form> <?php if (isset($_POST["email"]) || isset($_POST["tel"])){ if (isset($_POST["name"])) {$name = $_POST["name"];} if (isset($_POST["tel"])) {$tel = $_POST["tel"];} if (isset($_POST["email"])) {$email = $_POST["email"];} if (isset($_POST["body"])) {$body = $_POST["body"];} if(empty($email) or empty($name) or empty($body)){   //отправка сообщения на email } else if(empty($tel) or empty($name) or empty($body)){   //отправка сообщения на tel } else{   //вывод предупреждения, что не заполнены обязательные поля } комментарии    
      Заменить на соответствующий код который будет выполнять эти действия
  • Popular Contributors