我无法理解如何使用socket.io
向正在执行HTML请求的用户发送邮件。
更多解释:
我的服务器是expressJS
,我使用router.get
和router.post
管理我的所有应用。
我也使用cookie-session(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 :(得分:0)
您可以使用socketId
req.io.sockets.connected[socketid].emit('logged', 'Hello!');