我试图用express@3.0.0rc4
和socket.io@0.9.10
构建一个简单的应用程序。
Ive用express Generator生成我的应用程序的skel:
express --sessions --css stylus --ejs myapp
然后我编辑了package.json文件以包含socket.io:
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app"
},
"dependencies": {
"express": "3.0.0rc4",
"ejs": "*",
"stylus": "*",
"socket.io": "*"
}
}
io.sockets.on('connection', callback.. bla bla bla);
io.sockets.on('connection', function(socket) {
^
TypeError: Cannot call method 'on' of undefined
info - socket.io started
在运行时,so socket.io正在初始化,但似乎没有io.sockets模块。
我运行console.log(io);
查看该对象,我得到:
{ version: '0.9.10',
protocol: 1,
clientVersion: '0.9.10',
listen: [Function],
Manager:
{ [Function: Manager]
defaultTransports: [ 'websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling' ] },
Transport: [Function: Transport],
Socket: [Function: Socket],
Static: [Function: Static],
Store: { [Function: Store] Client: [Function] },
MemoryStore: { [Function: Memory] Client: [Function: Client] },
RedisStore: { [Function: Redis] Client: [Function: Client] },
parser:
{ packets:
{ disconnect: 0,
connect: 1,
heartbeat: 2,
message: 3,
json: 4,
event: 5,
ack: 6,
error: 7,
noop: 8 },
reasons:
{ 'transport not supported': 0,
'client not handshaken': 1,
unauthorized: 2 },
advice: { reconnect: 0 },
encodePacket: [Function],
encodePayload: [Function],
decodePacket: [Function],
decodePayload: [Function] } }
那么sockets方法在哪里呢?无处可去。但是你看,有一个套接字功能:
Socket: [Function: Socket]
this.id = id;
this.namespace = nsp;
this.manager = manager;
this.disconnected = false;
this.ackPackets = 0;
this.acks = {};
this.setFlags();
this.readable = readable;
this.store = this.manager.store.client(this.id);
this.on('error', defaultError);
以防万一,我将发布我的app.js
,但我的代码似乎没有问题:
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, io = require('socket.io');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(require('stylus').middleware(__dirname + '/public'));
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
app.get('/', routes.index);
app.get('/users', user.list);
var server = http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
io.listen(server);
console.log(io.Socket);
io.sockets.on('connection', function(socket) {
socket.emit('init', { msg: 'Welcome'});
socket.on('roll', function(data) {
console.log(data);
})
});
var app = require('express')()
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server)
server.listen(3000)
io.on('connection',function(socket){
console.log('connection..')
})
问题内容: 使用Nginx时,我的套接字无法连接。我的配置文件是: 我的NodeJS是: 我的客户是 不用说,两者都不显示任何东西。我担心Nginx阻止了该请求,而节点却实际上从未收到它? 问题答案: 好像缺少了
问题内容: 我最近一直在四处寻找,以找到一种在nodeJS和PHP之间进行通信的好方法。这里是一个想法:nodeJS还是一个很新的东西,仅使用它开发一个完整的应用程序可能有点棘手。而且,您可能只需要项目的一个模块(例如实时通知,聊天等),就可以使用PHP来管理所有其他内容,因为它可能对您来说更容易(而且您可以利用现有框架,例如CodeIgniter或Symfony)。 我想有一个简单的解决方案;
我最近一直在寻找一种在nodeJS和PHP之间进行通信的好方法。这里有一个想法:nodeJS仍然是相当新的,仅仅用它开发一个完整的应用程序可能有点棘手。此外,您可能只需要用于项目的一个模块,如实时通知、聊天等,而您希望用PHP管理所有其他内容,因为它对您来说可能更容易(而且您可以利用现有的框架,如CodeIgniter或Symfony)。
问题内容: 我正在做一个API,它在Heroku上。但是我只在heroku方面遇到了socket.io的一些问题,当我在本地对其进行测试时一切正常。该API完全独立于前端,因此它们位于不同的域(和不同的主机)中。问题是在生产中,我无法成功连接插座… 我有一些问题,所有这些都是关于heroku上的socket.io配置的。我知道有些帖子包含有关此信息的信息,但是我发现这些帖子使用的是旧版本的sock
问题内容: 我尝试使用nginx设置nodejs。但是当客户端尝试连接时,它将失败并显示… 那么如何启用websocket通信呢? 我目前的Nginx配置 问题答案: 首先,将您的nginx服务器升级到1.3或更高版本。 其次,我的nginx conf有效。您可以关注我的conf。
我想知道socket.io身份验证的最佳实践是什么。 Alice发出事件'message',参数包括Bobs、唯一标识符等。Bob在监听Socket.on('message')事件时接收消息。