我对io.emit()
和socket.emit()
之间区别的理解是io发送给所有连接的客户端,而socket.emit()
仅发送给连接的客户端。
我已经看到了带有快递的模式,您可以将io
实例绑定到响应,然后在路由处理程序中使用它......
const io = require('./socket/index')(server);
app.use((req, res, next) => {
res.io = io;
next();
});
如何附加"套接字"到请求/响应对象,以便仅向连接的客户端发送 事件?
例如:
app.use((req, res, next) => {
io.on('connection', (socket) => {
res.socket = socket;
});
next();
});
app.post('/upload', (req, res) => {
// emits only to the client in question
res.socket.emit('upload started');
})
答案 0 :(得分:0)
您需要保留套接字ID
// client
const socket = io.connect($constants.socketUrl,{
reconnection:true
});
socket.io将返回一个套接字会话,其中包含一个id
const clientId = socket.id
您需要在某处保留该ID(localStorage,cookies等)
然后在您的服务器中,您需要提供该ID以将消息发送到该特定客户端
socket.io保留一个连接的客户端列表,只需使用它。
//server, maybe you would need to add --> const socketId = "/#" + socketId
//Here is where you use io you passed previously.
io.sockets.connected[socketId].send(msg);
答案 1 :(得分:0)
如果您在var app = express();下的app.js中使用express generator添加以下行
var server = require('http').Server(app);
var io = require('socket.io')(server);
现在在app.js的结尾,您将看到module.exports = app;将其更改为
module.exports = {app: app, server: server};
接下来,在编辑器中打开bin / www。更改,var app = require('../ app');进入
var app = require('../app').app;
然后更改var服务器= http.createServer(app);进入
var server = require('../app').server;
打开app.js备份并添加此中间件
app.use(function(req, res, next){
res.io = io;
next();
});
现在您可以使用代码发出
/* GET users listing. */
router.get('/', function(req, res, next) {
res.io.emit("emit", "users");
res.send('respond with a resource.');
});
答案 2 :(得分:0)
我已经使用socket.io和express generator开发了一个完整的应用程序。请浏览我的博客文章,我也将指向我的存储库的链接添加到我的文章中。
https://medium.com/@mohsinyounas05/configuring-socket-io-with-express-generator-2ce2c778ed68