Node.js 在http get请求上发出socket.io消息(在Express.js中)

Node.js 在http get请求上发出socket.io消息(在Express.js中),node.js,socket.io,Node.js,Socket.io,在我的socket.io/express应用程序中,我希望能够向localhost:3000/send发出GET请求,并让它向所有打开的连接发送消息。但是,此代码似乎不起作用: var LISTENING_PORT = 1234; var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); //Example users app.get

在我的socket.io/express应用程序中,我希望能够向localhost:3000/send发出GET请求,并让它向所有打开的连接发送消息。但是,此代码似乎不起作用:

var LISTENING_PORT = 1234;

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

//Example users
app.get('/messages', function(req, res){
  res.sendFile(__dirname + '/messages.html');
});

//Basket Reservation Namespace
var basket_reservation = io
  .on('connection', function(socket){
    socket.on('message', function(message){
      console.log('Received connection from user: ' + message);
      socket.emit('message', 'Connection started.');
    });

    app.get('/send', function(req, res){
      console.log('sending message to all');
      socket.emit('message', 'Message from GET /send');
      res.send('Message sent.');
    });
  });

http.listen(LISTENING_PORT, function(){
  console.log('listening on *:' + LISTENING_PORT);
});
特别是行socket.emit('message','messagefrom GET/send');不起作用。上面和下面的线路都会被呼叫

以下是客户:

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script type="text/javascript">
  var socket = io('http://localhost:1234/');
  socket.emit('message', 'hello');
  socket.on('message', function(msg){
    $('#messages').append($('<li>').text(msg));
  });
</script>

<h1>User #1</h1>


<ul id="messages"></ul>

变量套接字=io('http://localhost:1234/');
emit('message','hello');
socket.on('message',函数(msg){
$(“#消息”).append($(“
  • ”).text(msg)); }); 用户#1

    • 我认为您的代码无法响应
      /send
      路由,因为您正在
      io.on('connection')上异步声明它。

      我建议在('connection')上的
      io.on之外声明此项-我还没有运行我的代码-因此不确定它是否会运行:

      //Basket Reservation Namespace
      var basket_reservation = io
        .on('connection', function(socket){
          socket.on('message', function(message){
          console.log('Received connection from user: ' + message);
          socket.emit('message', 'Connection started.');
      });
      
      // Helper to send message (it uses closure to keep a reference to the io connetion - which is stored in basket_reservation in your code)
      var sendMessage = function (msg) {
        if (basket_reservation && basket_reservation.connected) {
          console.log('sending message to all');
          basket_reservation.emit('message', 'Message from GET /send');
        }
      };
      
      // Broadcast message
      app.get('/send', function(req, res){
        sendMessage(req.body.data);
        res.send('Message sent.');
      });
      

      我认为您的代码无法响应
      /send
      路由,因为您正在
      io.on('connection')
      上异步声明它

      我建议在('connection')上的
      io.on之外声明此项-我还没有运行我的代码-因此不确定它是否会运行:

      //Basket Reservation Namespace
      var basket_reservation = io
        .on('connection', function(socket){
          socket.on('message', function(message){
          console.log('Received connection from user: ' + message);
          socket.emit('message', 'Connection started.');
      });
      
      // Helper to send message (it uses closure to keep a reference to the io connetion - which is stored in basket_reservation in your code)
      var sendMessage = function (msg) {
        if (basket_reservation && basket_reservation.connected) {
          console.log('sending message to all');
          basket_reservation.emit('message', 'Message from GET /send');
        }
      };
      
      // Broadcast message
      app.get('/send', function(req, res){
        sendMessage(req.body.data);
        res.send('Message sent.');
      });