套接字io不会在服务器端发出警报

时间:2019-06-19 14:14:55

标签: javascript socket.io stomp

我有一个包含两条路线的简单快递js。一个用于获取html页面,另一个用于发送网络套接字消息

var express = require('express');
var router = express.Router();
var mysql = require('mysql');

var app = express();


var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '123456'
});


router.get('/', function(req, res){
res.sendFile('/express/one/index.html');
});


router.get('/get_me', function(req, res){
   res.send('GET route on things.');

   io.on('connection', function (socket) {
     socket.emit('trial',Math.random());
  });


var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '123456'
});

connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }
  console.log('connected as id ' + connection.threadId);
});

});

router.post('/post_me/:one/:two', function(req, res){
   res.send('POST route on things.' + req.params.one + req.params.two +'.');
});



router.get('/hello/:name', function(req, res) {
    res.send('hello ' + req.params.name + '!');
});

router.get('/hello/:first/:second/:third', function(req, res) {
    res.send('hello ' + req.params.first + req.params.second + req.params.third + '!');
});

app.use('/', router);
var server = app.listen(3000);
var io = require('socket.io').listen(server);

在客户端,我有这个

   var socket = io('http://localhost:3000');
     socket.on('trial', function (data) {
    alert(data);
  });

我希望在执行get_me时在客户端获得一个随机数而不会刷新

情况并非如此。我只在执行get_me并刷新index.html页面时才得到随机数。

socket io应该是这样工作的吗(在设置的时间间隔后刷新html页面以获取消息)?

我来自脚协议的背景,事实并非如此。

1 个答案:

答案 0 :(得分:0)

问题是,仅在达到'/get_me'路由后 初始化套接字。

解决方案:只需将io.on('connection' .... )放在路由之外,就在应用程序的根目录下,即可在启动时(而不是在到达路由之后)初始化套接字。