node.js - Socket.io表达不同的路由

标签 node.js sockets express websocket socket.io

我尝试在最新的 Express 版本上使用 Socket.IO 但没有成功。 我想在带有“router”的特定 js 文件上使用 Socket.IO 功能,而不是与全局文件“app.js”一起使用。

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

这是我的代码:

  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.ejs”的文件位于“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);

关于node.js - Socket.io表达不同的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32819612/

相关文章:

node.js - mongodb 和 Node js 中堆内存不足

node.js - 向 socket.io 对象添加数据

java - 如何在android中用Java发送数据报包

python - 如何在 python 中使用 tcp 套接字发送 json 对象

node.js - 如何更新 Mongoose 中的部分但非全部字段

node.js - ExpressJS : How to redirect a POST request with parameters

javascript - Node.js 超出最大调用堆栈

node.js - NodeJS请求——如何从环境中禁用自动代理

linux - bind() before connect() 可能会返回 EADDRNOTAVAIL,即使有许多临时端口可用

reactjs - 有什么办法可以避免使用 React 在 SSR 中出现 "Text content did not match"警告?