web-dev-qa-db-ja.com

herokuでsocket.ioチャットを設定できますか?

新しい Heroku'cedar ' スタックの1つにアップロードした単純なsocket.ioチャットアプリケーションがあります。

今ではほとんどすべてが機能していますが、つまずきが1つあります。ローカルホストで、クライアントからソケットサーバーへの接続を次のように開きます。

// lots of HTML omitted
socket = new io.Socket('localhost', {port: 8888});

しかし、Herokuでは、明らかにこれらの値を別のものに置き換える必要があります。

次のように、サーバー上のプロセスオブジェクトからポートを取得できます。

port = process.env.PORT || 8888

それをビューに渡します。

しかし、'localhost'の代わりに何を使用すればよいですか?

28
David Tuite

これは2013年10月の時点で変更され、herokuはWebSocketのサポートを追加しました。

https://devcenter.heroku.com/articles/node-websockets

使用する:

heroku labs:enable websockets

WebSocketを有効にし、削除することを忘れないでください:

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
}); 
9
Skeep

Herokuの article による正しい方法は次のとおりです。

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});
socket = new io.Socket();

これにより、io.SocketがWebSocketを使用しようとしないことが保証されます。

21
Luke Chadwick

次の手順を実行することで、Socket.IOv0.8をHerokuCedarで動作させることができました。

Expressアプリ内(私の場合はCoffeeScript内):

app = express.createServer();
socket = require("socket.io")

...

io = socket.listen(app);
io.configure () ->
  io.set("transports", ["xhr-polling"])
  io.set("polling duration", 10)

io.sockets.on('connection', (socket) ->
  socket.on('myaction', (data) ->
    ...
    socket.emit('result', {myData: data})

### The port setting is needed by Heroku or your app won't start
port = process.env.PORT || 3000;
app.listen(port);


そしてアプリケーションの正面向きのJavascript内:

var socket = io.connect(window.location.hostname);
function sendSocketRequest() {
  socket.emit('myaction', $("#some_field").val());
}

socket.on('result', function(data) {
  console.log(data);
}

便利なリンク:

14
Moolio

太陽の下ですべての組み合わせを試した後、私はついにそれを空白のままにしました。見よ、それは完璧に機能する。ポートも必要ありません。

socket = new io.Socket();
6
David Tuite

私もherokuでこの問題を抱えていました。ホスト名「myapp.herokuapp.com」(または単にwindow.location.hostnameを使用して、ローカルと本番環境の両方で機能する)を使用し、ポートを80に設定して機能させることができました。SocketIO0.6.0を使用しています。

2
davidfrancisco

2011-06-25T21:41:31+00:00 heroku[router]: Error H13 (Connection closed without response) -> GET appxxxx.herokuapp.com/socket.io/1/websocket/4fd434d5caad5028b1af690599f4ca8e dyno=web.1 queue= wait= service= status=503 bytes=

これは、アプリの前にあるherokuルーターがWebソケットトラフィックを処理するように構成されていないことを意味しているのでしょうか?

[update]2011年6月22日の時点で、答えは「はい」と表示されます... herokuはsocket.ioをサポートしていませんこの投稿を参照してください:- http://blog.heroku.com/archives/2011/6/22/the_new_heroku_2_node_js_new_http_routing_capabilities/

0
todd

実際のホスト名を入れてみませんか?

0
nicolaskruchten