2015-12-28 6 views
5

В настоящее время я пытаюсь использовать socket.io и node.js-сервер для связи с скриптом Unity. У меня все подключено и работает с localhost, но по какой-то причине, когда я переношу его на свой сервер Heroku, он не может подключиться. Я предполагаю, что это может иметь какое-то отношение к URL-адресу? Я новичок в socket.io, поэтому любая помощь будет оценена.Socket.io woks с localhost, но не на сервере 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')); 
}); 

Мое соединение URL:

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 в папке views. URL, по которому я развернул его, является socketip

+0

Код работает (как и мой старый код), но я до сих пор не могу установить соединение с Unity с этим URL. –

+0

Какой язык вы используете в единстве Boo или C#, можете ли вы, пожалуйста, поделиться блоком кода, может обсуждать, что сторона решит проблему. – inampaki

3

Проблема почти наверняка является неправильным номером порта.

В приложении вы проверяете для process.env.PORT и если это не набор, вы недобросовестный 5000.

В вашем Ws URL однако, вы, кажется, всегда ожидая, ваше приложение будет прослушивать порт 5000.

Вы можете проверить настройки конфигурации вашего приложения, выполнив следующую команду в корневом каталоге вашего проекта:

heroku run printenv

Это напечатает список конфигурационного Варса, в то числе текущего установленного значения PORT, например:

PORT=9352

Вы должны использовать этот порт при построении вашего Ws URL, например:

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

+4

Я сделал это, и каждый раз, когда я делаю printenv, он дает мне другой порт. В любом случае я попробовал, и это не сработало – dangalg

1

Позвольте мне рассказать вам, что я сделал в качестве решения. Я использовал этот проект: https://github.com/teyou/Unity_POC_Socket, который работает с Heroku И изменил код сокета io на мой код, и он работает ... Итак, вы можете это сделать или проверить, что заставляет этот проект работать.

Смежные вопросы