@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 поведение то же.
  • Вопрос задан
  • 316 просмотров
Решения вопроса 1
@x2roma Автор вопроса
Инженер. Учусь веб программированию.
Нужно в опциях прописать тип сокета.
const io = require('socket.io')(httpServer, { wsEngine: 'ws' });

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

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

Похожие вопросы