2017-06-22 116 views
0

我有一些麻煩,以瞭解如何使用發送到socket.io是誰做的HTML請求的用戶的消息。使用將消息發送給連接的用戶socket.io

更多解釋相關:

服務器

我的服務器是expressJS我用router.getrouter.post來管理我所有的應用程序。 我使用Cookie的會話(https://github.com/expressjs/cookie-session)也。

客戶

客戶端必須先登錄,那麼他將被重定向在一個單頁的應用程序,一切都與AJAX處理。

實時通知

我想,讓客戶做爲例AJAX請求,併發送使用socket.io通知。

服務器端代碼

  • app.js

// Require all modules first, then: 
 
var server = https.createServer(options, app); 
 
server.listen(443); 
 
io = io().listen(server, { 
 
    wsEngine: 'ws',  // Use "ws" engine (otherwise: seg. fault) 
 
    pingInterval: 3000, // Time in ms to send a ping paquet 
 
    pingTimeout: 3000, // Time ins ms to set a connection as disconnected 
 
    allowUpgrades: false, 
 
    cookie: false 
 
}); 
 
app.use(function (req, res, next) { 
 
    if (!req.io) req.io = io; 
 
    if (!req.sockets) req.sockets = {}; 
 
    next(); 
 
});

  • 指數路線(index.js

router.get('/home', function (req, res, next) { 
 
    req.io.emit('logged', 'Hello!'); 
 

 
    // Some data processing 
 
    // ... 
 
    // 
 
    
 
    res.render('home/home', { datas: datas, csrfToken: req.csrfToken() }); 
 
});

客戶端代碼

  • 索引頁

<html> 
 

 
<!-- page content --> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> 
 
<script> 
 
    // Import socket.io functions 
 
    var socket = io.connect({ 
 
    reconnection: true, 
 
    reconnectionDelay: 1000, 
 
    reconnectionDelayMax: 5000, 
 
    reconnectionAttempts: Infinity 
 
    }); 
 
</script> 
 
<script src="/static/js/socket.io-management.js"></script> 
 

 
</html>

  • socket.io-management.js

socket.on('connect', function() { 
 
    console.log('socket connected'); 
 
}); 
 
socket.on('disconnect', function() { 
 
    console.log('socket disconnected'); 
 
}); 
 
socket.on('error', function() { 
 
    console.log('socket error'); 
 
}); 
 

 
socket.on('logged', function (msg) { 
 
    if ((msg !== 'undefined') && (msg !== null)) console.log(msg); 
 
    else console.log('Logged'); 
 
});

問題

在服務器上,req.io.emit('logged', 'Hello!');工作,但發這條短信給所有用戶,而不是一個誰請求的頁面。

我怎樣才能發送該消息僅此特定用戶?我已經嘗試了很多東西,直到現在,沒有成功。

回答

0

您可以使用socketId

req.io.sockets.connected[socketid].emit('logged', 'Hello!'); 
+0

我試圖將其發送給特定的用戶,但我需要得到每個用戶的正確插座的ID,而我卻沒有取得成功, – flexbrane