2015-12-28 15 views
5

Attualmente sto cercando di utilizzare socket.io e un server node.js per comunicare con uno script Unity. Ho tutto collegato e funzionante con localhost, ma per qualche motivo quando lo porto al mio server Heroku non riesce a connettersi. Suppongo che potrebbe avere qualcosa a che fare con l'URL? Sono nuovo di socket.io quindi qualsiasi aiuto sarebbe apprezzato.Socket.io woks con localhost ma non sul server Heroku

miei node.js server:

var express = require('express'); 
var app = express(); 
var expressWs = require('express-ws')(app); 
var path = require('path'); 

var server = require('http').createServer(app); 
var io = require('socket.io')(server); 

io.on('connection', function(socket) { 
    socket.on('beep', function(){ 
     socket.emit("speed", {data: 5}); 
     console.log('beep recieved'); 
    }); 

    socket.on('change-speed', function(data) { 
     console.log('change speed recieved: ' + data); 
     socket.emit("speed", {newSpeed: data}); 
    }); 

    socket.on('ios-connection', function(data) { 
     console.log('ios connection with message: ' + data); 
    }); 

}); 

app.set('port', (process.env.PORT || 5000)); 

app.listen(app.get('port'), function() { 
    console.log('Node app is running on port', app.get('port')); 
}); 

mio URL di connessione:

ws://<heroku app name>.herokuapp.com:5000/socket.io/?EIO=4&transport=websocket 
+0

Ciao Caroline hai risolto il problema Sto affrontando un problema simile – dangalg

risposta

1

Ho schierato il codice con piccole modifiche e il suo bel lavoro su Heroku prega di dare un'occhiata al suo interno. lato Server app.js

var express = require('express'); 
var app = express(); 
app.set('port', (process.env.PORT || 5000)); 

var server = app.listen(app.get('port'), function() { 
    console.log('Node app is running on port', app.get('port')); 
}); 

var io = require('socket.io')(server); 

app.use(express.static("./views")); 

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    next(); 
}); 

app.get('/', function (req, res) { 
    var path = __dirname + '/views/index.html'; 
    console.log(path); 
    res.sendFile(path); 
}); 

io.on('connection', function(socket) { 
    socket.on('beep', function(){ 
     socket.emit("beep", {data: 5}); 
     console.log('beep recieved'); 
    }); 

    socket.on('change-speed', function(data) { 
     console.log('change speed recieved: ' + data); 
     socket.emit("speed", {newSpeed: data}); 
    }); 

    socket.on('ios-connection', function(data) { 
     console.log('ios connection with message: ' + data); 
    }); 
}); 

package.json

{ 
    "name": "socketio", 
    "version": "1.0.0", 
    "description": "", 
    "main": "app.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "start" : "node app.js" 
    }, 
    "author": "inampaki", 
    "license": "ISC", 
    "dependencies": { 
    "express": "^4.13.3", 
    "express-ws": "^0.2.6", 
    "socket.io": "^1.3.7" 
    } 
} 

index.html

<script src="/socket.io.js"></script> 
<script> 
    var socket = io.connect('/'); 
    socket.on('speed', function (data) { 
    console.log('speed Message Received!'); 
    console.log(data);  
    }); 

    socket.on('beep', function (data) { 
    console.log('beep Message Received!');  
    console.log(data);  
    }); 
    socket.emit("beep", {beep : true}); 
    socket.emit("change-speed", {"change-speed" : true}); 
    socket.emit("ios-connection", {"ios-connection" : true}); 


</script> 

nota che fanno risparmiare index.html e presa. io.j s nella cartella views. L'URL su cui è stato distribuito è socketip

+0

Il codice funziona (come il mio vecchio codice era troppo), ma non riesco ancora a stabilire una connessione da Unity con quell'URL. –

+0

quale lingua stai usando in unità Boo o C# puoi per favore condividere il blocco di codice che potrebbe discutere quella parte risolverà il problema. – inampaki

3

Il problema è quasi certamente un numero di porta errato.

Nell'applicazione, si sta verificando per process.env.PORT e se è non set, si sono inadempienti a 5000.

Nel tuo URL ws tuttavia, ti sembra di essere sempre in attesa l'applicazione per essere in ascolto sulla porta 5000.

È possibile controllare le impostazioni di configurazione della vostra applicazione eseguendo il comando seguente nella root del vostro progetto:

heroku run printenv

Questo stamperà un elenco di Vars di configurazione, tra cui l'attuale valore impostato PORT, ad esempio:

PORT=9352

si dovrebbe usare questa porta quando si costruisce vostro WS URL, ad esempio:

WS://your-app.herokuapp.com:9352/socket.io/?EIO=4 & transport = websocket

+4

Ho fatto questo e ogni volta che faccio printenv mi dà una porta diversa. Ad ogni modo l'ho provato e non ha funzionato – dangalg

1

Lascia che ti dica cosa ho fatto come soluzione. Ho usato questo progetto: https://github.com/teyou/Unity_POC_Socket che funziona con Heroku E ho cambiato il codice socket in mio codice e funziona ... Quindi puoi farlo o controllare cosa fa funzionare questo progetto.

Problemi correlati