Задать вопрос
@x2roma
Инженер. Учусь веб программированию.

Зависание отправки Socket.io в NODE под Windows — как лечить?

Добрый день. Перерыл весь инет - ответа не нашел. Есть библиотека socket.io для node. В linux она работает как положено. Но я работаю в windows(вернее учусь). И там есть небольшой косяк. Мало того, что транспорт определяется не как websocket а pooling, но проблема не в этом. Проблема в том, что при подключении более 1 клиента отправка сообщений через socket.io зависает на 10-20 секунд, а если отправить его повторно то проходит мгновенно новое и предыдущее... Знакома ли Вам такая ситуация и если да - как ее лечить?
мой Сервер:
var io = require('socket.io');
var http = require('http');
var fs = require('fs');

var app = http .createServer(handler);
var io = io.listen(app);
app.listen('80');

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function (socket) {
	socket.on('eventtoServer', function (data) {
		console.log(data);
		io.sockets.emit('eventtoClient', { data: data.msg });
	});
	socket.on('disconnect', function () {
		console.log('user disconnected');
	});
});


мой Клиент:
<html>
<head>
	<title>Test socket.io</title>
	<script src="/socket.io/socket.io.js"></script>
	<script>
	var socket = io.connect('http://200.14.1.124:80');

	socket.on('eventtoClient', function (data) {
    document.getElementById("name").value = data.data;
		console.log(data);
	});
function send(){
var msgfromclient = document.getElementById("inp").value;
	socket.emit('eventtoServer', { msg: msgfromclient });
};

	</script>
</head>
<body>
  <textarea id="name" rows="8" cols="40"></textarea>
  <p></p>
  <input type="text" name="text" id="inp" size="20">
  <button type="button" name="button" onclick="send()">Отправить</button>
</body>
</html>


ps. Система win10, на winServer12 поведение то же.
  • Вопрос задан
  • 341 просмотр
Подписаться 2 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Merion Academy
    Администрирование MS Windows Server
    1 месяц
    Далее
  • Нетология
    Инженер по автоматизации
    13 месяцев
    Далее
  • Skillbox
    Системный администратор с нуля
    6 месяцев
    Далее
Решения вопроса 1
@x2roma Автор вопроса
Инженер. Учусь веб программированию.
Нужно в опциях прописать тип сокета.
const io = require('socket.io')(httpServer, { wsEngine: 'ws' });

Такая проблема только в виндовс. Поэтому в новой версии socket.io 2.1.0 эта настройка будет по умолчанию.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Монетка Екатеринбург
от 130 000 до 160 000 ₽
Гринатом Петрозаводск
До 80 000 ₽
Алабуга Екатеринбург
от 127 500 ₽