Решил поковырять Node.JS на примере простенького чата. Использую express и socket.io.
При подключении нового юзера, почему-то создается 2 сокета и информация, соответственно, отправляется дважды, при том id сокета тоже разный, будто подключилось 2 разных клиента.
Код на сервере:
var express = require('express');
var loger = require('log4js').getLogger();
var app = express();
var port = 3000;
server = app.listen(port);
var io = require('socket.io').listen(server);
loger.debug('App has been started...');
app.use(express.static(__dirname+'/public'));
app.get('/socket.io.js', function(req,res){
res.sendFile(__dirname+'/node_modules/socket.io-client/dist/socket.io.js');
});
app.get('/jquery.js', function(req,res){
res.sendFile(__dirname+'/node_modules/jquery/dist/jquery.min.js');
});
io.on('connection', function(socket){
var name = 'User-' + (socket.id).toString();
socket.broadcast.emit('newUser', name);
socket.emit('userName', name);
loger.info(name + ' connected to chat!');
});
код клиента:
var port = 3000;
var socket = io.connect('http://localhost:' + port);
socket.on('userName', function(userName){
console.log('Your nickname => '+userName);
$('textarea').val($('textarea').val() + 'Your username => ' + userName + '\n');
})
socket.on('newUser', function(userName){
console.log('New user has been connected to chat | ' + userName);
$('textarea').val($('textarea').val() + userName + ' connected!\n');
});
сама форма пока такая:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>MyFirstChat</title>
</head>
<body>
<textarea name="name" rows="8" cols="40"></textarea>
<p></p>
<input type="text" name="text" size="20">
<button type="button" name="button">Отправить</button>
<script src="/socket.io.js"></script>
<script src="/jquery.js"></script>
<script src="/main.js"></script>
<script>
var socket = io();
</script>
</body>
</html>
при запущенном сервере подключаюсь по 127.0.0.1:3000 и вижу в логе сервера такие строки:
[nodemon] starting `node app.js`
[2017-06-04 01:43:23.643] [DEBUG] [default] - App has been started...
[2017-06-04 01:43:24.292] [INFO] [default] - User-EuQvB85yLok7qpNoAAAA connectet to chat!
[2017-06-04 01:43:24.298] [INFO] [default] - User-gJgCheLXiMgUHeFFAAAB connectet to chat!
а в браузере, в textarea получаю:
Your username => User-BQvRBqocCGOBQFqqAAAC
User-pYgjwfRr5WNfdmn1AAAD connected!
Если пробую открыть во втором окне адрес, то textarea первого окна принимает такой вид:
Your username => User-IaDaou7X3VDQSeqYAAAE
User-QLvsv9X0lAGqXnL7AAAF connected!
User-XLrvZ9xMUIBOhXDyAAAG connected!
User-KelzU_dUnANLbXEqAAAH connected!
Не могу понять, почему так происходит, прошу указать на мою оплошность) Спасибо!