создание чата на node.js на хостинге

270
11 мая 2018, 10:39

на хостинге установили 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! я не понимаю почему, и где и как можно отслеживать ошибки. чего вообще хочу добиться: до авторизации какого-либо пользователя чат не нужен, как только пользователь авторизовывается на сайте, открывается сокет и на сайте для всех остальных пользователей и гостей видна надпись что тот авторизованный пользователь в сети, и напротив его логина появляется кнопка создать чат, но только для авторизованых пользователей, при нажатии на нее открывается окошко чата, как на сайте вконтакте или фейсбуке, у получателя сообщения есть блок со списком все кто прислал ему сообщение, получатель нажимает на автора и пользователи начинают общение, каждый диалог с новым пользователь должен запускать свое окошко чата. причем этот чат существует на всех страницах сайта. после выхода пользователя через кнопку выход или закрытии вкладки сокет закрывается, а все сообщения записываются в базу данных!

Answer 1

Чат на webSoket. Для работы необходимо установить модуль ws

html:

    <body>
    <input type="text" id="chatInput">
    <button id="send" type="button">Отправить</button>
    <script>
        let chatInput = document.getElementById("chatInput");
let send = document.getElementById("send");
let body = document.querySelector("body");
send.addEventListener("click", sendChatMessage)
ws  = new WebSocket("ws://localhost:3333");
ws.addEventListener("message", checkChatMessage);
function sendChatMessage(event){
    var textMessage = chatInput.value;
    ws.send(textMessage);
    chatInput.value = "";
}
function checkChatMessage(event){
    var data = event.data;
    showChatMessage(data)
}
function showChatMessage(data){
    let tegP = document.createElement("p");
    tegP.innerText = data;
    body.appendChild(tegP)
}
    </script>
    </body>

server.js

const webSocket = require("ws");
const wsPort = 3333;
var playerOnline = {};
var wsServer = new webSocket.Server({
    port: wsPort
}, ()=>{
    console.log("**************Сервер Websocket запущен на порту:", wsPort, "**************")
});
wsServer.on("connection", (ws, req)=>{
    var id = Math.random();
    playerOnline[id] = ws;
    console.log("новое соединение " + id);
    ws.on('message', function incoming(message) {
    // console.log('получено сообщение ' + message);
    for (var key in playerOnline) {
      playerOnline[key].send(message);
    }
  });
    ws.on('close', function() {
    console.log('соединение закрыто ' + id);
    delete playerOnline[id];
  });
});
//эта часть кода отвечает за первоначальное подключение
const fs = require("fs"),
    http = require ("http"),
    url = require("url"),
    index = fs.readFileSync('./index.html'),//здесь нужно прописать путь к своему html
    port = 3000,
    server = http.createServer();
server.listen(port, function(){
  console.log("Сервер запущен по адресу localhost:"+port);
  console.log("*****************************************************************");
})
server.on("request", function(req, res){
  if (req.method == "GET") {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(index)
  } 
})

;

READ ALSO
Узнать тип файла при скачивании по ссылке

Узнать тип файла при скачивании по ссылке

Есть ссылка типа https://sitecom/docs/2342

204
последовательное скачивание файлов

последовательное скачивание файлов

не могу разобраться со скачиванием файловНужен скрипт для последовательного скачивания 2х файлов

189
Постраничный вывод без mysql [требует правки]

Постраничный вывод без mysql [требует правки]

Как реализовать постраничный вывод php без mysql

169