2017-09-24 94 views
0

我似乎无法弄清楚为什么node.js服务器连接正常,并从浏览器收到emit()罚款,但当我尝试从node.js返回(),它不会到达浏览器。我在这里错过了什么吗?Node.js应用程序接收来自浏览器的发射,但浏览器没有收到发射

控制台日志显示“测试收到”,但不显示“测试发送到浏览器”。

(的index.php)片段:

<script language="javascript" type="text/javascript">  
     var socket = io.connect('https://www.example.com:2053', {secure: true}); 
     socket.on('connect', function() { 
      socket.emit('join', '19AFA53df7715sfs484'); 
     }); 


     socket.on('testsend', function() { 
      console.log('Test Sent To Browser'); 
     }); 

     $(document).ready(function() { 
      $(this).on('click', '.mainlogo', function (e) { 
       e.preventDefault(); 
       socket.emit('testrecieve'); 
      }); 
     }); 

</script> 

插座代码(pipe.js):

var fs = require('fs'); 

var options = { 
    ca: fs.readFileSync(__dirname + '/ca.pem'), 
    key: fs.readFileSync(__dirname + '/file.pem'), 
    cert: fs.readFileSync(__dirname + '/file.crt') 
}; 

var express = require('express'), 
app = express(); 

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 

var https = require('https'), 
server = https.createServer(options, app), 
io = require('socket.io')(server, { origins: '*:*'}); 

server.listen(2053); 

// routing 
app.get('/', function (req, res) { 
    res.sendfile('/index.php'); 
}); 

io.sockets.on('connection', function (socket) { 

    socket.on('join', function(uauth){ 
     socket.join('messages'); 
     socket.join(''+uauth+''); 
    }); 

    socket.on('testrecieve', function() { 
     socket.broadcast.emit('testsend'); 
     console.log('Test Recieved'); 
    }); 

}); 

回答

1

问题是socket.broadcast.emit会将消息发送到除新创建的连接之外的所有其他客户端。这不是你想要的。您应该改用socket.emit

+0

啊,是的,你是正确的,这确实有效。但我真的需要广播到一个频道,例如,这是行不通的: 'socket.broadcast.to('messages')。emit('testsend');' –

+1

如果你想广播到一个频道的所有套接字('message')。emit('testsend');' –

+0

@KevinJ我不太熟悉socket.io等中的通道, d建议你查看一些文档。 –

1

有错误,它是socket.emit,不socket.broadcast.emit

socket.on('testrecieve', function() { 
    socket.emit('testsend'); 
    console.log('Test Recieved'); 
}); 

socket.broadcast.emit将发送给除新连接之外的所有人。

+0

然而,你是正确的@ giorgi-moniava在1分钟内击败你。 –

+0

没问题,只要你得到正确的答案:) –

+0

@KevinJ公平起见,我认为弗朗索瓦是第一个回答。但我的回答包含了为什么broadcast.emit使用不正确。无论如何。 –

相关问题