繁体   English   中英

无法让socket.io工作

[英]Can't get socket.io to work

客户端库js文件未加载。 尝试将socket.io加载到我的项目中,但客户端未检测到应该自动提供的javascript库。 这是我的代码。

 var express = require('express') , passport = require('passport') , util = require('util') , session = require('express-session') , SteamStrategy = require('../../').Strategy , Steam = require('machinepack-steam') , path = require('path') , app = express() , http = require('http') , socket = require('socket.io') ; app.set('port', process.env.PORT || 2053); var server = http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); }); var io = socket.listen(server); io.sockets.on('connection', function () { console.log('hello world im a hot socket'); }); var steamkey = 'redacted'; passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); passport.use(new SteamStrategy({ returnURL: 'https://get-a.team/auth/steam/return', realm: 'https://get-a.team', apiKey: steamkey }, function(identifier, profile, done) { // asynchronous verification, for effect... process.nextTick(function () { profile.identifier = identifier; return done(null, profile); }); } )); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(session({ secret: 'your secret', name: 'name of session id', resave: true, saveUninitialized: true})); app.use(passport.initialize()); app.use(passport.session()); app.use(express.static(path.join('public'))); app.get('/', function(req, res){ if(req.user){ res.redirect('/account'); } else { res.render('index', { user: req.user }); } }); app.get('/search/:appid', ensureAuthenticated, function(req, res){ if(Number.isInteger(+req.params.appid)){ res.render('search', { user: req.user, appid: req.params.appid }); } else { res.render('error', { user: req.user, error: "Wrong url format "+req.params.appid }); } }) app.get('/account', ensureAuthenticated, function(req, res){ Steam.getOwnedGames({ steamid: req.user.id, key: steamkey, include_appinfo: 1, include_played_free_games: 1, appids_filter: [], }).exec({ // An unexpected error occurred. error: function(err) { console.error(err); }, // OK. success: function(result) { //console.log(result); // save every game that isnt already saved res.render('account', { user: req.user, games: result }); }, }); }); app.get('/logout', function(req, res){ req.logout(); res.redirect('/'); }); app.get('/auth/steam', passport.authenticate('steam', { failureRedirect: '/' }), function(req, res) { res.redirect('/'); }); app.get('/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/' }), function(req, res) { res.redirect('/account'); }); app.listen(3000); function ensureAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/'); } 

任何帮助将不胜感激

我尝试了许多不同的方法来在线上包含套接字库,但是没有办法起作用,甚至包括直接从socket.io网站复制的代码。

我尝试了localhost:2053 / socket.io / socket.io.js,但仍然无法正常工作。 不知道我在做什么错

弄清楚了。 必须将socket.io重新加载到其他端口:

 ... , app2 = require('express')() , http2 = require('http').Server(app2) ; var io = require('socket.io')(http2); io.on('connection', function(socket){ console.log('a user connected'); }); app2.get('/', function(req, res){ res.send('<h1>Hello world</h1>'); }); http2.listen(2085, function(){ console.log('listening on *:2085'); }); 

创建一个nginx规则以从该端口提供lib服务:

 location /route/ { rewrite ^/route/?(.*)$ /$1 break; proxy_pass http://127.0.0.1:2085; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 

最后从客户端加载它:

  <script src="/route/socket.io/socket.io.js"></script>

如果有人知道正确的做法,请告诉我。 但是,这很奏效,感觉就像在方孔中强力钉住一个圆钉。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM