以下は、動的に割り当てられた名前空間を処理するための私のコードです。クライアントは接続し、リファラーを使用してクライアントのアカウントIDを検索します。以下にない関数で、そのアカウントIDにまだ名前空間が割り当てられていない場合は、新しい名前空間が生成されます(UUID)。既存の名前空間が返されます。
次に、その名前空間がクライアントに発行され、クライアントはconnect
その特定の名前空間に関する新しいメッセージで順番に応答します。
これはすべて機能します。
残念ながら、ns_socket.emit('hi');
多くのクライアントが接続している場合でも、ステートメントはns_socketに返されます。
明確にするために、クライアント1が名前空間に接続する場合、hi
はそのクライアントに対して1回起動されます。クライアント2が同じ名前空間に接続すると、hi
(私には)不明な理由で2番目のクライアントに2回起動されますが、1回だけ起動する必要があります。
どんな助けでも、明らかに、非常にありがたいです。
var main = io.of('').on('connection', function(socket) {
socket.on('joinDynNs',function(data) {
var nameslug = socket.handshake.headers.referer.match(/(http(s)?:\/\/)([A-Za-z0-9-]+)\./)[3];
getActID(nameslug, function(actID) {
var ns = getNamespace(nS, actID);
socket.emit('assignNamespace',{ns:ns});
io.of('/' + ns).on('connection', function(ns_socket) {
ns_socket.emit('hi');
});
});
});
});