Socket.io 只发送给当前用户
Posted
技术标签:
【中文标题】Socket.io 只发送给当前用户【英文标题】:Socket.io only emitting to current user 【发布时间】: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');
);
【问题讨论】:
【参考方案1】:问题在于connect
是一个socket.io 事件,在连接成功时会被触发
尝试在服务器上使用它
io.sockets.emit('connect message', data: 'hey there!');
这个在客户端
socketService.on('connect message', function(data)
console.log('connection identified');
);
【讨论】:
谢谢。使用特定的事件标题是值得的,这样你就不会与“保留”的词发生冲突。我应该已经意识到“连接”已经用于某些事情了。以上是关于Socket.io 只发送给当前用户的主要内容,如果未能解决你的问题,请参考以下文章
使用 socket.io v1.3.x 将单个用户的请求发送给一组预定义的用户
Socket.IO 在两个用户之间发送消息的最佳方式? [关闭]