2015-12-28 22 views
5

Ich versuche derzeit, socket.io und einen node.js-Server für die Kommunikation mit einem Unity-Skript zu verwenden. Ich habe alles angeschlossen und arbeite mit localhost, aber aus irgendeinem Grund kann ich keine Verbindung herstellen, wenn ich es auf meinen Heroku-Server portiere. Ich nehme an, dass es etwas mit den URLs zu tun haben könnte? Ich bin neu bei socket.io, also würde jede Hilfe geschätzt werden.Socket.io arbeitet mit localhost, aber nicht auf dem Heroku-Server

Mein 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')); 
}); 

Meine Verbindung URL:

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

Hallo Caroline hast du das gelöst Ich stehe vor einem ähnlichen Problem – dangalg

Antwort

1

Ich habe Ihren Code mit geringfügigen Änderungen im Einsatz und seine Arbeit an Heroku feinen einen Blick hinein nehmen bitte. Server-Seite 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> 

Notiz, die index.html und Steckdose speichern. io.j s im Ordner Ansichten. URL, auf der ich es eingesetzt habe, ist socketip

+0

Der Code funktioniert (wie mein alter Code auch), aber ich kann immer noch keine Verbindung von Unity mit dieser URL herstellen. –

+0

Welche Sprache verwenden Sie in Unity Boo oder C# können Sie bitte teilen Sie den Codeblock möglicherweise diskutieren diese Seite wird das Problem lösen. – inampaki

3

Das Problem ist fast sicher eine falsche Portnummer.

in Ihrer Anwendung Sie process.env.PORT werden überprüft und, wenn es nicht gesetzt ist, werden säumige Sie bis 5000.

In Ihrem ws URL jedoch scheinen Sie immer auf Ihre Bewerbung erwarten auf zu hören Port 5000.

Sie die Konfigurationseinstellungen Ihrer Anwendung überprüfen, indem Sie den folgenden Befehl in der Wurzel Ihres Projekts:

heroku run printenv

Dadurch wird eine Liste von Konfigurations Vars, einschließlich des aktuellen Satzes PORT Wert drucken, zB:

PORT=9352

Sie diesen Port verwenden sollten, wenn Sie Ihre ws URLs konstruieren, zB:

ws://your-app.herokuapp.com:9352/socket.io/?EIO=4 & Transport = Websocket

+4

Ich tat dies und jedes Mal, wenn ich printenv mache, gibt es mir einen anderen Port. Jedenfalls habe ich es ausprobiert und es hat nicht funktioniert – dangalg

1

Lassen Sie mich Ihnen sagen, was ich als Lösung getan habe. Ich habe dieses Projekt verwendet: https://github.com/teyou/Unity_POC_Socket das funktioniert mit Heroku Und änderte den Socket-Code, um mein Code zu sein und es funktioniert ... So können Sie entweder tun oder überprüfen, was dieses Projekt funktioniert.

Verwandte Themen