我有以下服务器端代码:
var express = require('express')
, http = require('http')
, routes = require('./routes')
, io = require('socket.io')
, factory = require('./serverfactory.js');
var app = express();
var server = app.listen(3000);
io = io.listen(server);
io.sockets.on('connection',function(socket){
console.log('new user');
socket.emit('hail','mysimplemsg');
socket.on('customevent',function(msg){
console.log(msg);
});
});
//var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
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 socket = io.connect('http://localhost:3000');
socket.emit('customevent','work');
socket.on('hail',function(msg){
console.log(msg);
});
我希望我的git console
输出new user
(它会这样做)然后它应该输出work
(它没有)然后我在我的浏览器控制台中获得一个消息{{ 1}}(它没有)。
为什么没有调用服务器端mysimplemsg
的事件以及为什么不调用customevent
的客户端事件?
答案 0 :(得分:1)
我认为问题是您在连接之前从客户端发出 customevent 。尝试添加连接处理程序并将客户端发送到其中:
var socket = io.connect('http://localhost:3000');
socket.on('hail',function(msg){
console.log(msg);
});
socket.on('connect',function(){
console.log('connected to socket.io server');
socket.emit('customevent','work');
});
如果连接处理程序不命中,则验证您是否正确引用了客户端socket.io javascript库(jade语法):
script(type='text/javascript',src='/socket.io/socket.io.js')
答案 1 :(得分:0)
终于明白了。
它在opera
上工作正常但在chrome and firefox
上没有。我找到了this链接,其中该人说要在服务器端插入此代码段。
io.configure('development', function(){
io.set('transports', ['xhr-polling']);
});
现在工作正常。