@f_u_s_s
Любопытный кодер

Почему connect срабатывает дважды?

Решил поковырять 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!


Не могу понять, почему так происходит, прошу указать на мою оплошность) Спасибо!
  • Вопрос задан
  • 329 просмотров
Решения вопроса 1
@BorisKorobkov
Web developer
Что такое "код клиента"? Это main.js?
Тогда зачем дважды создаете var socket (в "коде клиента" и "форме")?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы