簡體   English   中英

向/ namespace中的所有人發送Emit()-NodeJS,Socket.IO

[英]Emit() to everyone in /namespace - NodeJS, Socket.IO

我嘗試了幾種嘗試嘗試向連接到特定/ namespace的所有用戶發出警報的方法,但是沒有運氣。 我可能會誤會套接字的工作方式。

但是我現在所擁有的是兩個在不同頁面上打開的瀏覽器。 當用戶連接到pageA時,該用戶現在是'/ users'名稱空間的一部分。 當用戶連接到pageB時,該用戶現在是“ / valets”命名空間的一部分。

我在pageA上有一個.emit()發送到server.js。 我用.on()監聽它,然后嘗試運行.emit(),但只運行'/ valets'命名空間中的用戶。

我可以在終端中看到“正在偵聽請求代客”和console.log(data)部分。

我相信我的問題是usr_nsp.of('/valets').emit("incoming-request",{data:data}); 一部分。 到目前為止,我已經嘗試過其他注釋行。 它們都給我一個錯誤:不是函數。

server.js

var app = require('http').createServer();
var io = require('socket.io')(app);
app.listen(3000, function(){
    console.log('listening on port 3000');
});

var redis = require('socket.io/node_modules/redis');


// create custom namespace for Users
var room_number;
var usr_nsp = io.of('/users');
usr_nsp.on('connection', function(socket){
    console.log('user has connected to /users namespace');

    socket.on('request-valet', function(data){

        console.log("listening for request valet");
        console.log(data);
        room_number = data.room_number;
        socket.join(room_number);

        // usr_nsp.broadcast.of('/valets').emit("incoming-request",{repark:data});
        // usr_nsp.of('/valets').broadcast.emit("incoming-request",{repark:data});
        // io.of('/valets').emit("incoming-request",{repark:data});
        // socket.of('/valets').emit("incoming-request",{repark:data});
        usr_nsp.of('/valets').emit("incoming-request",{repark:data});

    });


});

var valet_nsp = io.of('/valets');
valet_nsp.on('connection', function(socket){
    console.log('valet has connected to /valets namespace');

    // var room_number;

    socket.on('join-room', function(data){
        // assign valet to room
        room_number = data.room_number;
        socket.join(room_number);

        //valet_nsp.sockets.in(room_number).emit("request-accepted",{current_pos:current_pos})

    });

    socket.on('set-valet-starting-position', function(data){

        //var valet_starting_pos = data.starting_position;
        valet_nsp.sockets.in(room_number).emit('activate-directions-service', {repark:data});
    })

    socket.on('get-new-location', function(data){

        // send the updated location only to User
        // maybe use .broadcast??
        valet_nsp.sockets.in(room_number).emit("update-valet-location", {current_pos:data});

    });

});

pageB.html(套接字部分)

socket.on('incoming-request', function(data){

        console.log("incoming request");
        alert("incoming request");

        // use data to display on html screen


    });

您創建的名稱空間句柄用於向該特定名稱空間中的用戶發出 因此,這應該起作用:

var users  = io.of('/users'),
    valets = io.of('/valets');

users.on('connection', function(socket) {
  socket.on('request-valet', function(data) {
    valets.emit('incoming-request', { repark : data });
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM