Ответы пользователя по тегу Socket.io
  • Создание диалогов Node.js и Socket.io?

    @de1m
    У socket.io есть же rooms/namespaces. Нельзя разве их использовать?

    Или что-то такое( с той же страницы)
    Клиент
    socket.on('connect', function () {
      socket.emit('join', {email: user@example.com});
    });


    Сервер
    io.on('connection', function (socket) {
       socket.on('join', function (data) {    
        socket.join(data.email);
      });
    });


    Посылаем сообщение со стороны сервера
    io.to('user@example.com').emit('message', {msg: 'hello world.'});


    Получаем у клиента
    socket.on("message", function(data) {
      alert(data.msg);
    });
    Ответ написан
    Комментировать
  • Как правильно установить SSL сертификат с Node.js скриптом (Socket.io)?

    @de1m
    Из моего старого ответа.

    На одном порту работать не будет, надо два порта.
    Я поменял пример, но этот у меня точно работает, всего на двух портах
    var express = require('express');  
    var app = express();  
    var server = require('http').createServer(app);  
    var io = require('socket.io')(server);
    var fs = require('fs');
    var https = require('https');
    
    app.set('views', __dirname + '/views')
    app.set('view engine', 'pug')
    app.use(express.static(__dirname + '/public'))
    
    server.listen(5000, function () {
      console.log('Server listening at port %d', 5000);
    });
    
    const opts = {
      key: fs.readFileSync('privateKey.key'),
      cert: fs.readFileSync('certificate.crt')
    }
    
    var httpsServer = https.createServer(opts, app);
    httpsServer.listen(5001, function(){
      console.log("HTTPS on port " + 5001);
    })
    
    app.get('/', function (req, res) {
      res.render('index');
    })
    
    io.attach(httpsServer);
    io.attach(server);
    
    io.on('connection', function(client) {  
        console.log('Client connected...');
        client.on('click', function(data){
          console.log(JSON.parse(data));
            setTimeout(function() {
              client.emit("ok", "data");
            }, 3000);
        })
    });


    Со стороны клиента надо добавить проверку http или https.
    if (window.location.protocol != "https:"){
            var socket = io.connect('https://localhost:5001');    
        } else {
            var socket = io.connect('http://localhost:5000');
        }
    Ответ написан
  • Можно ли отказаться от socket.io в пользу ws?

    @de1m
    Плюс в том, что если к клиент или кто-то на пути не поддерживает вебсокет, то тогда socket.io может переключиться на POST и GET. Чистый вебсокет так не может. У меня такое было, когда nginx прокси был криво настроен и не поддерживал вебсокет.
    Минус в размере, клиенту надо скачивать библиотеку socket.io.
    Ответ написан
    Комментировать
  • СокетИО и большое количество событий?

    @de1m
    По-моему пример как-то странно выглядит.
    "socket.on" происходит при каком-то событии, а не при появление нового пользователя.
    То есть к примеру клиент (один или тысяча) говорит
    socket.emit('getUserInfo')
    А на стороне сервера
    io = require('socket.io').listen(httpsServer);
    io.on('connection', function(socket) {
      socket.on('getUserInfo', function(e) {
        //code
         ...
        socket.emit('sendUserInfo', data)
      })
    });

    То есть это не зависит от количества клиентов. Хотя да, будут висеть открытыми TCP соединения с каждым клиентом.
    Ответ написан
  • Почему сообщение не отправляется всем клиентам (socket.io)?

    @de1m
    У меня с broadcast тоже не работало, попробуйте так.
    io.emit('writeModalConfigs', result);
    Вот тут полностью пример
    Ответ написан
  • Почему возникает ошибка при подключении к socket io?

    @de1m
    Посмотрите вот этот пример. Сам по себе пример может и не очень, но сокет приделан хорошо.
    Нужно по возможности стараться использовать страндартные порты (80,443), так как все остальные могут быть заблокированны у клиента. В примере используются порты 5000,5001, но их можно легко поменять на нужные.
    Ответ написан
    Комментировать
  • Как в библиотеке socket io понять кто вышел из сайта?

    @de1m
    При соеденении присваеваете id, что-то типа
    io.sockets.on('connection', function (socket) {
         clientid = socket.id;


    А при дисконнекте, смотрите какой id
    Ответ написан
    Комментировать
  • Как сформулировать подключение socket.io по https и http на примере?

    @de1m
    На одном порту работать не будет, надо два порта.
    Я поменял пример, но этот у меня точно работает, всего на двух портах
    var express = require('express');  
    var app = express();  
    var server = require('http').createServer(app);  
    var io = require('socket.io')(server);
    var fs = require('fs');
    var https = require('https');
    
    app.set('views', __dirname + '/views')
    app.set('view engine', 'pug')
    app.use(express.static(__dirname + '/public'))
    
    server.listen(5000, function () {
      console.log('Server listening at port %d', 5000);
    });
    
    const opts = {
      key: fs.readFileSync('privateKey.key'),
      cert: fs.readFileSync('certificate.crt')
    }
    
    var httpsServer = https.createServer(opts, app);
    httpsServer.listen(5001, function(){
      console.log("HTTPS on port " + 5001);
    })
    
    app.get('/', function (req, res) {
      res.render('index');
    })
    
    io.attach(httpsServer);
    io.attach(server);
    
    io.on('connection', function(client) {  
        console.log('Client connected...');
        client.on('click', function(data){
          console.log(JSON.parse(data));
            setTimeout(function() {
              client.emit("ok", "data");
            }, 3000);
        })
    });


    Со стороны клиента надо добавить проверку http или https.
    if (window.location.protocol != "https:"){
            var socket = io.connect('https://localhost:5001');    
        } else {
            var socket = io.connect('http://localhost:5000');
        }
    Ответ написан
    8 комментариев