假设存在对套接字服务器进行订阅的对象,如下所示:
socket.on('news', obj.socketEvent)
这些对象的生命周期很短,并且经常被创建,从而生成许多订阅.这似乎是一个内存泄漏和容易出错的情况,直观地阻止这种情况:
socket.off('news', obj.socketEvent)
在删除对象之前,但唉,off套接字中没有方法.还有另一种方法吗?
编辑:找不到答案我正在指定一个空白方法来覆盖原始事件处理程序的包装器方法,下面是一个示例.
var _blank = function(){};
var cbProxy = function(){
obj.socketEvent.apply(obj, arguments)
};
var cbProxyProxy = function(){
cbProxy.apply ({}, arguments)
}
socket.on('news', cbProxyProxy);
// ...and to unsubscribe
cbProxy = _blank;
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习节点并开始使用socket.io创建mashup.消息传输已经开始但我遇到了一些麻烦.
消息事件多次触发,导致单个消息在收件人的框中多次出现.我已经将套接字路由到exports.chat并且想知道是否导致问题?
缩小问题的范围:消息的触发次数=客户端的连接顺序.也就是说,如果客户端连接第二个,他的消息将触发两次.连接第三个的客户三次.
这是代码片段:
exports.chat = function(io, pseudoArray, req, res){
res.render('chat', {title: 'ChatPanel.'});
var users = 0;
io.sockets.on('connection', function (socket) { // First connection
users += 1;
// reloadUsers(io, users);
socket.on('message', function (data) { // Broadcast the message to all
if(pseudoSet(socket)) {
var transmit = {date : new Date().toISOString(), pseudo : returnPseudo(socket), message : data};
socket.broadcast.emit('message', transmit);
console.log("user "+ transmit['pseudo'] +" said \""+data+"\"");
}
});
socket.set('pseudo', req.session.user, function(){
pseudoArray.push(req.session.user);
socket.emit('pseudoStatus', 'ok');
console.log("user " + req.session.user + " connected"); …Run Code Online (Sandbox Code Playgroud) 当控制器不再相关时,何时,何地以及如何摆脱旧的事件监听器?
考虑SPA有两条路线:/login和/loggedin
app.factory('socket', ['$window', function(window) {
return window.io();
}]);
app.controller('loginController', ['socket', function (socket) {
this.tryLogin = function(credentials) {
socket.emit('login', credentials);
}
sokcet.on('loginResponse', function(data) {
if (data.status == 'OK') {
// Navigate to loggedInController
} else {
// Show error message and keep listening - user might try again
}
});
}]);
app.controller('loggedInController', ['socket', function (socket) {/* Logged in, but loginController is still listening for loginResponse */}]); …Run Code Online (Sandbox Code Playgroud) 我有一些socket.io服务器的代码:
var io = require("socket.io");
io = io(server);
io.on('connection', connectionHandler);
Run Code Online (Sandbox Code Playgroud)
一切都很好.我想知道如何删除该连接侦听器 - 不像套接字,它似乎
io.removeListener('connection', connectionHandler);
Run Code Online (Sandbox Code Playgroud)
不起作用(我得到"io.removeListener不是一个函数").如何在('连接')侦听器上删除它?
如果重要的话,我正在开发一个socket.io房间管理库,我正在写一个重置功能.我正在使用测试套件与Mocha之间的重置功能.我想重置函数来删除on连接侦听器.
Socket.io版本是1.3.7