var socket = io.connect('http://localhost:3000');
var express = require('express'); var routes = require('./routes/index'); var user = require('./routes/user'); var chat = require('./routes/chat'); var http = require('http'); var path = require('path'); var MongoStore = require('connect-mongo')(express); var settings = require('./settings'); var flash = require('connect-flash'); var multer = require('multer'); var app = express(); app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(flash()); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({ secret:settings.cookiesSecret, key:settings.db, cookie:{maxAge:1000*60*60*24*30}, store:new MongoStore({ db:settings.db }) })); app.use(multer({ dest: './public/images/user', rename: function (fieldname, filename) { return filename; } })); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname,'bower_components'))); if ('development' == app.get('env')) { app.use(express.errorHandler()); } routes(app); var server = http.createServer(app); var io = require('socket.io')(server); io.on('connection', function(){ console.log('connection') }); server.listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
出错这个错误:
Request URL:http://localhost:3000/socket.io/1/?t=1420622609420 Status Code:400 Bad Request 服务器返回的错误信息是:{"code":0,"message":"Transport unknown"}
这是什么情况?求大神解答~~~
客户端用这个:
var socket = io.connect('http://localhost');
把端口删掉
另外,你socket.io用的是什么版本。现在已经是1.0了,记得更新哦。。。
代码都没帖全,socket.io版本是多少,express版本是多少?
我断定你肯定是自己拷贝了一份socket.io 0.9.x
版本的浏览器端js,然后在浏览器发起的ws请求
而服务端socket.io
版本是1.x
, 这两个版本根本不通用
!
0.9.x
版本会先尝试建立websocket
连接,地址格式是/socket.io/1/?t=xxx
,如果服务器响应超时,或者拒绝,会fallback到polling
,服务端响应的数据格式是sid:interval_time:timeout_time:...
这样的,不会产生json
格式的响应
1.x
版本会优先建立polling
请求,地址格式是/socket.io/?transport=polling&t=xxx
,然后upgrade到websocket
,服务端返回json
格式的配置文件,如果出现错误,返回的json格式就是{"code":0,"message":"xxx"}
所以你使用了0.9.x版本的客户端socket.io向1.x版本的服务端socket.io发起了请求,解决办法是使用socket.io内置的js
,地址是/socket.io/socket.io.js
,这个js不需要你自己拷贝进去,直接就可以引用
<script src="/socket.io/socket.io.js?1.2.1"></script>