2015-12-28 73 views
5

我目前正在嘗試使用socket.io和node.js服務器與Unity腳本進行通信。我有一切與本地主機連接,但由於某種原因,當我將它移植到我的Heroku服務器時,它無法連接。我假設它可能與URL有關?我是socket.io的新手,所以任何幫助,將不勝感激。Socket.io與本地主機,而不是在Heroku服務器

我的node.js服務器:

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

我的連接網址:

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

嗨卡羅琳你解決這個問題,我面臨一個類似的問題 – dangalg

回答

1

我有輕微的變化及其在Heroku做工精細請看看到它部署你的代碼。 服務器端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> 

注意保存的index.html和插座。 io.j s在視圖文件夾中。我部署它的URL是socketip

+0

的代碼工作(像我的舊代碼太),但我仍不能建立從Unity與URL連接。 –

+0

你在統一使用哪種語言Boo或C#可以請你分享一下代碼塊可能正在討論那邊會解決這個問題。 – inampaki

3

問題幾乎可以肯定是一個不正確的端口號。

在你的應用程序,你檢查process.env.PORT,如果它是不,你默認爲5000

然而,在您的WS網址,你似乎總是期待您的應用程序被監聽端口5000

您可以在項目的根目錄下運行以下命令來檢查應用程序的配置設置:

heroku run printenv

這將打印配置瓦爾的列表,包括當前設定PORT值,例如:

WS:

PORT=9352

構建您的WS的URL,例如,當您應該使用此端口/ /your-app.herokuapp.com:9352/socket.io/?EIO=4 & transport = websocket

+4

我這樣做,每次我做printenv它給了我一個不同的端口。無論如何,我試了一下,它沒有奏效 – dangalg

1

讓我告訴你我做了什麼解決方案。 我用這個項目:https://github.com/teyou/Unity_POC_Socket與Heroku的 工作,改變了插座IO代碼是我的代碼和它的作品... 所以,你可以做到這一點或檢查什麼使這個項目的工作。

相關問題