这肯定已经被问了一千次了,但我没有找到任何令人满意的答案,所以我会尝试再试一次,尽可能清楚。
我从一个干净的 Express 开始;通常通过以下终端命令完成的一个:
user$ express
user$ npm install
然后我继续安装socket.io,这样:
user$ npm install socket.io --save
在我的 main.js 文件中,我有以下内容:
//app.js
var express = require('express'),
http = require('http'),
path = require('path'),
io = require('socket.io'),
routes = require('./routes');
var app = express();
我通过将它附加到我的快递服务器来启动我的 socket.io 服务器:
//app.js
var server = http.createServer(app).listen(app.get('port'), function(){
console.log('express server started!');
});
var sIo = io.listen(server);
我现在要做的是设置 Express 使用的常用路线:
//app.js
app.get('/', routes.index);
app.get('/send/:recipient/:text', routes.sendMessage);
现在,由于我喜欢让事情井井有条,我想将我的 socket.io 代码放在另一个文件中,而不是使用通常的代码:
//app.js
sIo.sockets.on('connection', function(socket){
console.log('got a connection');
});
我使用以下内容来访问套接字和sIo 对象(因为该对象包含所有连接信息(重要)):
//app.js
sIo.sockets.on('connection', function(socket){
routes.connection(sIo, socket);
});
// index.js (./routes)
exports.connection = function(sIo, socket){
console.log('got a connection.');
};
这样我就可以在这里完成我所有的 socket.io 工作。我知道我现在可以从 sIo 对象访问我所有的客户信息,但是当然,它们不包含有关其会话数据的任何信息。
我现在的问题如下:
假设用户发出 HTTP 请求以发送消息,并且我的路由中的处理程序如下所示:
export.sendMessage = function(req, res){ //在这里做事 };
我怎样才能让它在我的 socket.io 中“触发”某些东西来发送消息?我不想知道所有需要完成的底层工作,比如跟踪消息、用户等。我只想了解如何“触发”socket.io 来做某事。
- 如何确保 socket.io仅将消息发送给特定的人,并 100% 确保没有其他人收到它?据我所知,没有办法从 sIo 对象获取会话信息。
提前致谢。