套接字.IO表示不同的路由



我正在尝试使用Socket。IO在最新的快速版本,但没有成功。我想使用插座。在特定的js文件中使用"router"而不是全局的"app.js"来实现IO功能。

另外,我希望服务器端与客户端是不同的页面。

下面是我的代码:

  1. 服务器端,一个名为"addPost.js"的文件,位于"routes"文件夹:

    router.get('/', function(req, res, next) {
      io.on('connection', function (socket) {
        socket.emit('news',
            {
                hello: 'world'
            });
        socket.on('my other event', function (data) {
            console.log(data);
        });
      });
      res.render('addPost');
    });
    
  2. 客户端,一个名为"index"的文件。"addPost.js"位于"views"文件夹中,它与"addPost.js"无关:

    <script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script>
      var socket = io.connect('http://localhost:3000/');
      socket.on('news', function (data) {
          console.log(data);
          socket.emit('my other event', { my: 'data' });
      });
    </script>
    

我如何在它们之间连接?

你需要让套接字监听服务器的端口。在addPost.js中:

   function listenServer(){
io = require('socket.io').listen(server)
}

如果你不想在你的应用程序文件中这样做,你应该发送链接到你的服务器到套接字。在app.js中这样写:

    var server = http.createServer(app);
server.listen(app.get('port'), function(){
    log.info('Express server listening on port ' + app.get('port'));
});
var socket = require('addPost.js');
socket.listenServer(server);

您不需要放置io。在内部路由器

router.get('/', function(req, res, next) {
  res.render('addPost');
  // after you render the page
  // client will connect to socket
  // or if you want to send news along with this request do something like
  getNews(function(err, news){          
      res.render('addPost', {news: news});
      // obviously you need to render the news in your view
  });
});  

io.on('connection', function (socket) {
  // now after the client has recieved page from res.render
  // client will connect and can ask for news
  socket.on('getNews', function () {
      // your logic to get news
      getNews(function(err, news){          
          if(!err) socket.emit('news', news);
      });
  });
  socket.on('my other event', function (data) {
      console.log(data);
  });
});

客户端脚本

<script>
  var socket = io.connect('http://localhost:3000/');
  //ask for news
  socket.emit('getNews');
  socket.on('news', function (data) {
      console.log(data);
      socket.emit('my other event', { my: 'data' });
  });
</script>

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新