0
我有一些麻煩,以瞭解如何使用發送到socket.io
是誰做的HTML請求的用戶的消息。使用將消息發送給連接的用戶socket.io
更多解釋相關:
服務器
我的服務器是expressJS
我用router.get
和router.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!');
工作,但發這條短信給所有用戶,而不是一個誰請求的頁面。
我怎樣才能發送該消息僅此特定用戶?我已經嘗試了很多東西,直到現在,沒有成功。
我試圖將其發送給特定的用戶,但我需要得到每個用戶的正確插座的ID,而我卻沒有取得成功, – flexbrane