【问题标题】:socket.io connection event not workingsocket.io 连接事件不起作用
【发布时间】:2014-07-18 19:19:06
【问题描述】:

我是 nodejs 的新手,我表达并尝试了 socket.io 只是一个简单的聊天应用程序。
它的代码非常简单,一切都很好,但节点控制台上没有事件触发日志。连接事件代码不起作用。 此外,浏览器端的 socket.io.js 文件给出 200 ok。

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');    

var app = express();    
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);

/// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
        err.status = 404;
        next(err);
    });

    /// error handlers

    // development error handler
    // will print stacktraces
    if (app.get('env') === 'development') {
        app.use(function(err, req, res, next) {
            res.status(err.status || 500);
            res.render('error', {
                message: err.message,
                error: err
            });
        });
    }

    // production error handler
    // no stacktraces leaked to user
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: {}
        });
    });

        var http  = require('http');

    app.set('port', process.env.PORT || 3000);

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

    io.on('connection', function(socket){  
      console.log('a user connected');  ///***this is not working
      socket.on('disconnect', function(){
        console.log('user disconnected'); 
      });
    });
    module.exports = app;

使用jade模板的客户端代码

extends layout  
block content
    h1 Socket.io
    ul#messages
    form(action='')
        input#m(autocomplete='off')
        button Send
    script(type='text/javascript', src='/socket.io/socket.io.js')
    script(type="text/javascript")
        var socket = io();

【问题讨论】:

    标签: node.js sockets socket.io


    【解决方案1】:

    如果您提供客户端代码,可能会更好地回答这个问题;但是,您可以在这里找到一些使用 socket.ok 连接的简单示例https://github.com/dcorns/exploreSocketIO 至少您需要客户端上的等效方法,因为它将启动握手。如果点击链接,一切都应该清楚了。

    【讨论】:

    • 感谢您的帮助...玉有问题,因为当我打开源代码时它显示 socket = io(); 我创建了另一个文件并包含了 var socket = io();比如脚本(type='text/javascript', src='../javascripts/socks.js')
    【解决方案2】:

    您是否使用过客户端代码? 示例代码可能如下所示。

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

    【讨论】:

      【解决方案3】:

      请像这样使用:

        io.sockets.on('connection', function(socket){  
              console.log('a user connected');  
              socket.on('disconnect', function(){
                 console.log('user disconnected'); 
              });
        });
      

      【讨论】:

      • 你必须要求 var io=require('io');安装 node.js 的 io 模块后。这是在 node.js 中使用 express io 的最佳方式。如果您正在使用 node.js 中的套接字编程,那么 io 将是一件很棒的事情。就用这个。这肯定可以正常工作..
      猜你喜欢
      • 1970-01-01
      • 2021-03-12
      • 2021-04-29
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2020-09-25
      相关资源
      最近更新 更多