Đây là một mẹo nhỏ nên hoạt động. Trước tiên, bạn tạo ứng dụng Socket của riêng mình để gửi một thông báo về kết nối đầu tiên (chứa tất cả thông tin bổ sung của bạn).
// Client side
io.MySocket = function(your_info, host, options){
io.Socket.apply(this, [host, options]);
this.on('connect', function(){
this.send({__special:your_info});
});
};
io.util.inherit(io.MySocket, io.Socket);
var my_info = {a:"ping"}
var socket = io.MySocket(my_info);
Sau đó, ở phía máy chủ, bạn sửa đổi ổ cắm để nghe tin nhắn đặc biệt và kích hoạt sự kiện khi có.
// Server side
var io = require('socket.io').listen(app);
io.on('connection', function(client){
client.on('message', function(message){
if (message.__special) {
io.emit('myconnection', client, message.__special);
}
});
});
io.on('myconnection', function(client, my_info) {
// Do your thing here
client.on('message', ...); // etc etc
}
Đây là kỹ thuật tôi đã sử dụng để liên kết xử lý phiên của tôi với Socket.IO cho gói tôi đã viết.
Tại sao không yêu cầu khách hàng gửi thông báo "" init "' khi họ kết nối? – Raynos
Bạn không thể. Chữ ký của các trình xử lý sự kiện không do người dùng định nghĩa, thư viện định nghĩa chúng. – davin