【问题标题】:Socket.io only emitting to current userSocket.io 只发送给当前用户
【发布时间】:2015-07-20 23:48:39
【问题描述】:

我正在一个基本应用程序中测试 Socket.io,但 io.sockets.emit 似乎没有按预期工作。下面是我相关的服务器端代码、Angular 套接字服务和控制器。当我运行此代码时,只有当前连接会看到 console.log 语句。基于io.sockets.emit,我的预期正好相反(每个 OTHER 用户都会看到其他用户连接时记录的消息)。

server.js:

var express        = require('express');
var app            = express();
var port           = process.env.PORT || 8000;
var io             = require('socket.io').listen(app.listen(port));

io.on('connection', function(socket){
  io.sockets.emit('connect', {data: 'hey there!'});
});

console.log('Connected on port ' + port);
exports = module.exports = app;

socket.service.js:

angular
  .module('app')
  .factory('socketService', function ($rootScope) {
    var socket = io.connect();
    return {
      on: function (eventName, callback) {
        socket.on(eventName, function () {  
          var args = arguments;
          $rootScope.$apply(function () {
            callback.apply(socket, args);
          });
        });
      },
      emit: function (eventName, data, callback) {
        socket.emit(eventName, data, function () {
          var args = arguments;
          $rootScope.$apply(function () {
            if (callback) {
              callback.apply(socket, args);
            }
          });
        })
      }
    };
  });

main.controller.js:

angular
  .module('app')
  .controller('MainController', MainController);

MainController.$inject = ['socketService'];

function MainController(socketService) {

    var vm = this;

    socketService.on('connect', function(data) {
        console.log('connection identified');
    });
}

【问题讨论】:

    标签: javascript angularjs node.js sockets socket.io


    【解决方案1】:

    问题在于connect 是一个socket.io 事件,在连接成功时会被触发

    尝试在服务器上使用它

    io.sockets.emit('connect message', {data: 'hey there!'});
    

    这个在客户端

    socketService.on('connect message', function(data) {
        console.log('connection identified');
    });
    

    【讨论】:

    • 谢谢。使用特定的事件标题是值得的,这样你就不会与“保留”的词发生冲突。我应该已经意识到“连接”已经用于某些事情了。
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多