質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2736閲覧

Herokuにデプロイしたサーバー(Node.js)にUnityからWebSocketSharpを使用して通信したい

hinatahinata

総合スコア29

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/02/16 08:42

Unityを使用してサーバーと通信するアプリを制作しています。

サーバー側:Node.js,ws
クライアント側:Unity2D,WebSocketSharp

これのサーバープログラムをHerokuにデプロイして接続しようとしたところ
接続ができなくて困っております。

恐らくサーバー側・クライアント側共にホストとポートの指定の部分で引っかかっているのだと思うのですが原因がわかりません。

ご教授いただければ幸いです。

#試したこと(ローカル通信:成功)
ネット上にあった下記のサンプルプログラムを実装し
ローカルでの通信に成功しました。

server

1var ws = require ('ws').Server; 2 3var wss = new ws ({port: 3000}); 4//var wss = new ws ({port: process.env.PORT||3000}); 5// herokuにデプロイする場合 ↑ のようにすべき? 6 7wss.on ('connection', function (socket) { 8 console.log ("[connect]"); 9 socket.on ('message', function (message) { 10 console.log ("[message]"); 11 socket.send('This is server'); 12 }); 13 14 socket.on('close', function () { 15 console.log ("[close]"); 16 }); 17});

client

1using UnityEngine; 2using System.Collections; 3using WebSocketSharp; 4using WebSocketSharp.Net; 5 6public class WebSocketClient: MonoBehaviour { 7 8 WebSocket ws; 9 10 void Start() 11 { 12 ws = new WebSocket("ws://localhost:3000/"); 13 // herokuにデプロイしたサーバーに接続する場合 14 // git push heroku masterを実行した際に表示される 15 // remote:https://***/ deployed to Heroku 16 // の[***]この部分を 17 // ws = new WebSocket("ws://***/"); 18 // のように記述すれば良い? 19 20 ws.OnOpen += (sender, e) => 21 { 22 Debug.Log("WebSocket Open"); 23 }; 24 25 ws.OnMessage += (sender, e) => 26 { 27 Debug.Log("WebSocket Message :" + e.Data); 28 }; 29 30 ws.OnError += (sender, e) => 31 { 32 Debug.Log("WebSocket Error Message: " + e.Message); 33 }; 34 35 ws.OnClose += (sender, e) => 36 { 37 Debug.Log("WebSocket Close"); 38 }; 39 40 ws.Connect(); 41 42 } 43 44 void Update() 45 { 46 47 if (Input.GetKeyUp("s")) 48 { 49 ws.Send("Test Message"); 50 } 51 52 } 53 54 void OnDestroy() 55 { 56 ws.Close(); 57 ws = null; 58 } 59}

#試したこと(Herokuと通信:失敗)

サーバー側のport指定を変更し

server

1var ws = require ('ws').Server; 2 3//var wss = new ws ({port: 3000}); 4var wss = new ws ({port: process.env.PORT||3000}); 5// このように変更

クライアント側のURLをgit push heroku masterを実行した際に表示されたURLに変更

client

1 // ws = new WebSocket("ws://localhost:3000/"); 2 ws = new WebSocket("ws://***.herokuapp.com/"); 3/* 4 git push heroku masterを実行した際に表示された 5 remote:https://***.herokuapp.com/ deployed to Heroku 6 のURLに変更した 7*/ 8

実行した結果接続できず、Unityのログ表示は以下の様になりました。

WebSocket Close UnityEngine.Debug:Log(Object) <>c:<Start>b__1_3(Object, CloseEventArgs) (at Assets/WebSocketClient.cs:35) WebSocketSharp.Ext:Emit(EventHandler`1, Object, CloseEventArgs) WebSocketSharp.WebSocket:close(PayloadData, Boolean, Boolean, Boolean) WebSocketSharp.WebSocket:fatal(String, UInt16) WebSocketSharp.WebSocket:fatal(String, Exception) WebSocketSharp.WebSocket:connect() WebSocketSharp.WebSocket:Connect() WebSocketClient:Start() (at Assets/WebSocketClient.cs:38) ← ws.Connect();のところ

##失敗2
以下、失敗2,3ともに同様のログ表示となりました。

server

1var ws = require ('ws').Server; 2 3//var wss = new ws ({port: 3000}); 4var wss = new ws ({port: process.env.PORT||3000}); 5// このように変更

client

1 // ws = new WebSocket("ws://localhost:3000/"); 2 ws = new WebSocket("ws://***.herokuapp.com:3000/");

##失敗3

server

1var ws = require ('ws').Server; 2 3var wss = new ws ({port: 3000}); 4// このように変更

client

1 // ws = new WebSocket("ws://localhost:3000/"); 2 ws = new WebSocket("ws://***.herokuapp.com/");

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Herokuへのデプロイの仕方に問題がありました。
Procfileを以下の様に記述し作成することで解決しました。

Procfile

1web: node wsTest.js

コード自体は以下の記述で実現可能でした。

server

1var wss = new ws ({port: (process.env.PORT||3000)});

client

1ws = new WebSocket("wss://wssss.herokuapp.com/");

投稿2019/02/17 14:43

hinatahinata

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問