Nano Hash - криптовалюты, майнинг, программирование

Socket.io открывает сотни подключений

введите здесь описание изображения

Это мой код server.js:

var express =require('express'),
http = require('http');
var app= express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

users = [];
connections = [];

server.listen(process.env.Port || 3000);
console.log('server running ...')

app.get('/', function(req, res) {
 res.sendFile(__dirname + '/index.html');
});

io.sockets.on('connection', function(socket){
 connections.push(socket);
 console.log('Connected: %s sockets connected', connections.length);

 socket.on('disconnect',function(data){
 users.splice(users.indexOf(socket.username),1);
 updateUsernames(); 
 connections.splice(connections.indexOf(socket),1);
 console.log('Disconnected: %s sockets conected', connections.length);
});
 //send message
 socket.on('send message', function(data){
  console.log(data)
  io.sockets.emit('new message',{msg: data, user: socket.username});
 });

 //new User

 socket.on('new user', function(data,callback){
  callback(true);
  socket.username = data;
  users.push(socket.username);
  updateUsernames();
 });

 function updateUsernames(){
  io.sockets.emit('get users', users)
 }
});

Вот мой html-файл:

<!DOCTYPE html>
<html>
<head>
 <title>IO chat</title>
 <link rel = "stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
 <script src="https://code.jquery.com/jquery-latest.min.js"></script>
  <script src="/socket.io/socket.io.js"></script>
 <style >
  body{
   margin-top: 30px;
  }
  #messageArea{
    display: none;
   }
 </style>
</head>
<body>
 <div class = "container">

 <div id = "userFormArea" class= "row">
  <div class = "col-md-12"> 
   <form id = "userForm"> 
     <div class = "form-group">
      <label>Enter Username</label>
      <input class = "form-control" id = "username"> 
      <br/>
      <input type="submit" class = "btn btn-primary" value = " Login"/>
     </div>
    </form>

  </div>
 </div>
  <div class = "row" id = "messageArea">
   <div class = "col-md-4">
    <div class = "well">
     <h3> Online users </h3>
     <ul class = "list-group" id = "users"> </ul>

     </div>

   </div>
   <div class = "col-md-8">
    <div class="chat" id = "chat"> </div>

    <form id = "messageForm"> 
     <div class = "form-group">
      <label>Enter Message</label>
      <textarea class = "form-control" id = "message"> </textarea>
      <br/>
      <input type="submit" class = "btn btn-primary" value = "Send Message"/>
     </div>
    </form>
   </div>

  </div>

 </div>
 <script>
  $(function(){
   var socket = io.connect();
   var $messageForm = $('#messageForm');
   var $message = $('#message');
   var $chat = $('#chat');
   var $userFormArea = $('#userFormArea');
   var $userForm = $('#userForm');
   var $messageArea = $('#messageArea');
   var $users = $('#users');
   var $username = $('#username');

   $messageForm.submit(function(e){
    e.preventDefault();
    socket.emit('send message', $message.val());
    $message.val('');
   });

   socket.on('new message', function(data){
    $chat.append('<div class = "well"><strong>'+data.user+'</strong>:' + data.msg + '<div>');
   });

   $userForm.submit(function(e){
    e.preventDefault();
    socket.emit('new user', $username.val(),function(data){
     if(data){
      $userFormArea.hide();
      $messageArea.show();
     }
    });
    $username.val('');
   });
   socket.on('get users', function(data){
    var html = '';
    for (i = 0; i< data.length; i++){
     html +='<li class = "list-group-item" >' + data[i]+ '</li>';
    }
    $users.html(html);
   });
  });
 </script>

</body>
</html>

Я некоторое время боролся за это, что-то не так с socket.io? Или это я что-то не так делаю.

Если есть что-то другое, что я должен сделать, пожалуйста, дайте мне знать. Я буквально подключаюсь к сокету, и он извергает журналы консоли.

Как вы можете видеть на картинке, я хочу сказать «Подключено»: 1 сокет подключен после подключения ОДНОГО человека.


  • Вы действительно пишете код с одним пробелом на уровень отступа? 14.11.2017
  • Сексуальный, чистый, и да. Есть идеи по розеткам? 14.11.2017
  • Вы говорите, что самый первый подключаемый сокет показывает connections.length как 18324? К вашему сведению, io.sockets.on() должно быть io.on(). 14.11.2017
  • Да, он буквально спамит io.sockets.on('connection'). Я изменил его на io.on(), тот же эффект. 14.11.2017
  • Когда я запускаю ваш точный серверный код с вашей точной HTML-страницей (загруженной с http://localhost:3000, я вижу это в консоли: server running ... Connected: 1 sockets connected. Я вообще не вижу вашей проблемы. Итак, происходит что-то еще, что не только вызвано кодом Вы показали. Заставляет меня задуматься, если у вас работает более старая версия вашего сервера, и вы на самом деле не используете эту версию своего сервера. Вы можете проверить запущенные процессы или перезагрузить свой сервер и запустить этот с нуля или изменить порт ты бежишь дальше. 15.11.2017
  • Вы открываете веб-страницу через http://localhost:3000 или напрямую из файловой системы? 15.11.2017
  • Здесь очень похожая проблема: stackoverflow.com/questions/47296987/, что было исправлено путем переустановки кода сервера socket.io. 15.11.2017

Ответы:


1

Обычно это происходит, когда клиент и сервер используют разные версии socket.io. Проверьте версию сервера от package.json и дайте клиенту ту же версию. У меня была такая же проблема, и обновление до socket.io version 2.1.1 устранило ее.

21.12.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..