на хостинге установили 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! я не понимаю почему, и где и как можно отслеживать ошибки. чего вообще хочу добиться: до авторизации какого-либо пользователя чат не нужен, как только пользователь авторизовывается на сайте, открывается сокет и на сайте для всех остальных пользователей и гостей видна надпись что тот авторизованный пользователь в сети, и напротив его логина появляется кнопка создать чат, но только для авторизованых пользователей, при нажатии на нее открывается окошко чата, как на сайте вконтакте или фейсбуке, у получателя сообщения есть блок со списком все кто прислал ему сообщение, получатель нажимает на автора и пользователи начинают общение, каждый диалог с новым пользователь должен запускать свое окошко чата. причем этот чат существует на всех страницах сайта. после выхода пользователя через кнопку выход или закрытии вкладки сокет закрывается, а все сообщения записываются в базу данных!
Чат на 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)
}
})
;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
не могу разобраться со скачиванием файловНужен скрипт для последовательного скачивания 2х файлов
Подключил на страницу несколько суперплагинов: