代码之家  ›  专栏  ›  技术社区  ›  BLang

Socket io使控制台日志记录用户连接到版本2。x、 x个

  •  0
  • BLang  · 技术社区  · 7 年前

    我有一个来自socket的基本node express/socket示例应用程序。io官方网站(链接粘贴在下面)和我注意到,当用户连接时,“连接”甚至只是一次又一次地启动。

    所以我找到了一个帖子( Socket IO chat repeating user connected )说套接字中有错误。io 2。x、 当我回到插座时。io 1.3.7此问题确实停止了,这是一个已确认的错误,我们应该回滚到1。x、 x版本?或者有没有一种使用套接字的新方法。未反映在当前文档中的io?

    我的服务器代码:

    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    
    app.get('/', function(req, res){
      res.sendFile(__dirname + '/index.html');
    });
    
    io.on('connection', function(socket){
      console.log('a user connected');
    });
    
    http.listen(3000, function(){
      console.log('listening on *:3000');
    });
    

    我的客户端代码:

    <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io();
    </script>
    

    我的服务器终端输出(永远重复):

    a user connected
    a user connected
    a user connected
    ...
    

    插座io官方示例: https://socket.io/get-started/chat/

    2 回复  |  直到 7 年前
        1
  •  1
  •   jfriend00    7 年前

    自套接字。io发布版本2。x、 如果您的套接字版本不匹配,则可能会导致无限重复的连接、断开连接、连接、断开连接等问题。客户端和服务器上的io代码。

    客户端缓存有时会使浏览器客户端停留在旧版本上,这会进一步加剧这种情况。

    通常的解决方法是确保你得到了插座。io客户端 /socket.io/socket.io.js 因为那是插座。io服务器发送与之完全匹配的客户端版本。但是,您似乎已经在这样做了,所以我猜您存在某种浏览器缓存问题。您可以手动清除浏览器缓存,以查看这是否是问题所在。

        2
  •  -1
  •   Faizuddin Mohammed    7 年前

    对服务器使用此选项:

    var express = require('express');    
    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    app.use(express.static('node_modules')); // serve static files
    app.get('/', function(req, res){
      res.sendFile(__dirname + '/index.html');
    });
    
    io.on('connection', function(socket){
      console.log('a user connected');
    });
    
    http.listen(3000, function(){
      console.log('listening on *:3000');
    });
    

    在HTML中:

    <!DOCTYPE html>
    <html lang="en">
    <body>
        <script src="socket.io-client/dist/socket.io.js"></script>
        <script>
            var socket = io();
        </script>
    </body>
    </html>
    

    错误可能与 <script src="/socket.io/socket.io.js"></script> 套接字IO提供的标记。