Node.js + Express + Socket.io : No client socket events firing

标签 node.js express socket.io

我在这些文件中有以下代码:

app.js:

/**
 * Module dependencies.
 */

var io = require('socket.io')
  , express = require('express')  
  , mongoose = require('mongoose')
  , models = require('./models')(mongoose)
  , routes = require('./routes')(models);
var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.use(express.cookieParser());
  app.use(express.session({secret:'123abc',key:'express.sid'}));
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', routes.index);

var sio = io.listen(app);
app.listen(3000);


sio.sockets.on('connection', function(socket) {
    socket.send('this is a test');
    console.log('socket connected, sessionID ' + socket.handshake.sessionID);
    socket.emit('welcome', {msg: 'welcome'});
});

var parseCookie = require('connect').utils.parseCookie;

sio.set('authorization', function (data, accept) {
        if (data.headers.cookie) {
                data.cookie = parseCookie(data.headers.cookie);
                data.sessionID = data.cookie['express.sid'];
        } else {
                return accept('No cookie transmitted.', false);
        }

        accept(null, true);
});

console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

/javascripts/socket.js:

var socket = io.connect('http://173.255.229.76', {port:3000});
            socket.on('connect', function(data) {
                console.log('connected');
            });
            socket.on('message', function(data) {
                    console.log(data);
            });

            socket.on('welcome', function(data) {
                    console.log(data);
            });

布局.jade:

!!!
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
    script(src="/socket.io/socket.io.js")
    script(src="/javascripts/socket.js")
  body!= body

当客户端连接时,我在控制台中获取调试信息,显示我期望的所有输出,但客户端上没有触发任何内容。没有任何事件被调用,并且没有数据记录到控制台。我究竟做错了什么?欢迎访问网址:http://173.255.229.76:3000亲自看看。

最佳答案

对于express 3,您需要创建一个http服务器实例才能使用socket.io

var express = require('express'),
app = express(),
io = require('socket.io'),
http = require('http');
//routes and config ...

var s = http.createServer(app);
var sio = io.listen(s);
s.listen(8080)
//do whatever

请告诉我这是否有帮助

关于Node.js + Express + Socket.io : No client socket events firing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416870/

相关文章:

javascript - 捕获自定义错误并发回自定义响应

node.js - 为什么 Sequelize 将我的日期时间更改为 T00 :00:00Z?

javascript - 找不到模块: in my app with node

node.js - 如何在ejs模板中使用in_array

node.js - 引用带有句点的项目的 Jade 模板

JavaScript、node.js 和安全性

javascript - 部署后如何强制客户端重新加载?

node.js - Socket.io 刷新时断开连接?

node.js - 使用 Node-React Web 应用程序进行 Nodemon 和/或热重载

javascript - 如何在 Hapi.js 中获取文件名并保存到磁盘?