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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

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

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

WebSocket

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

1回答

303閲覧

[Node.js]Express×Socket.io ioオブジェクトを他の.jsスクリプトから使いたい

YujiroIto

総合スコア8

Node.js

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

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

WebSocket

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2018/06/15 06:32

Expressのスケルトンコードを作成し、bin/www.jsにてsocket.ioのオブジェクトを作成しました。
そのioオブジェクトをroutes/~~~.jsにて使いたいのですが、そのようなことを実現するにはどのようにすれば良いでしょうか。

javascript

1var app = require('../app'); 2var debug = require('debug')('sync:server'); 3var http = require('http'); 4 5/** 6 * Get port from environment and store in Express. 7 */ 8 9var port = normalizePort(process.env.PORT || '3000'); 10app.set('port', port); 11 12/** 13 * Create HTTP server. 14 */ 15 16var server = http.createServer(app); 17var io = require('socket.io')(server); //※このオブジェクトをroutes/~~~.jsにて使いたい 18 19/** 20 * Listen on provided port, on all network interfaces. 21 */ 22 23server.listen(port); 24server.on('error', onError); 25server.on('listening', onListening); 26 27/** 28 * Normalize a port into a number, string, or false. 29 */ 30 31function normalizePort(val) { 32 var port = parseInt(val, 10); 33 34 if (isNaN(port)) { 35 // named pipe 36 return val; 37 } 38 39 if (port >= 0) { 40 // port number 41 return port; 42 } 43 44 return false; 45} 46 47/** 48 * Event listener for HTTP server "error" event. 49 */ 50 51function onError(error) { 52 if (error.syscall !== 'listen') { 53 throw error; 54 } 55 56 var bind = typeof port === 'string' 57 ? 'Pipe ' + port 58 : 'Port ' + port; 59 60 // handle specific listen errors with friendly messages 61 switch (error.code) { 62 case 'EACCES': 63 console.error(bind + ' requires elevated privileges'); 64 process.exit(1); 65 break; 66 case 'EADDRINUSE': 67 console.error(bind + ' is already in use'); 68 process.exit(1); 69 break; 70 default: 71 throw error; 72 } 73} 74 75/** 76 * Event listener for HTTP server "listening" event. 77 */ 78 79function onListening() { 80 var addr = server.address(); 81 var bind = typeof addr === 'string' 82 ? 'pipe ' + addr 83 : 'port ' + addr.port; 84 debug('Listening on ' + bind); 85} 86

結果的に実現したい内容は、routes/~~~.jsにてゲームループを実装。
ゲームループにてクライアント側に処理後のキャラクター座標を送信したいと考えております。
・www.js内で上手く完結させる方法
・www.jsの外へioオブジェクトを持ち出す方法
更にもっといい方法などご存知の方が居ましたら、是非ご教授いただきたいです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

Server API をクライアント側に渡して扱うのは無理です。というか、それが出来たらクラッキングし放題ですよね。公式ドキュメントのとおり、Client API でソケットサーバーに接続してメッセージ投げて、サーバー側で受信して処理、返信するしかないと思います。

下記のようなイメージになるんじゃないかなと。

javascript

1// Server 2io.on('connection', function (socket) { 3 // メッセージ待ち受け 4 socket.on('GET_MY_POSITION', function (data) { 5 // 計算した座標を送信 6 socket.emit('SUCCESS_GET_MY_POSITION', { x: 0, y: 0, z: 0 }); 7 }); 8});

javascript

1// Client 2import io from 'socket.io-client'; 3 4// ソケットサーバーに接続 5const socket = io('http://localhost'); 6 7const getMyPosition = (data) => { 8 // メッセージの返答待ち受け 9 const promise = new Promise((resolve, reject) => { 10 socket.once('SUCCESS_GET_MY_POSITION', function (data) { 11 resolve(data); 12 }); 13 14 socket.once('FAIL_GET_MY_POSITION', function (data) { 15 reject(data); 16 }); 17 }); 18 19 // メッセージを送信して座標計算してもらう 20 socket.emit('GET_MY_POSITION', data); 21 22 return promise; 23}; 24 25const loop = async () => { 26 // 受け取った座標を変数 pos に格納 27 const pos = await getMyPosition({ my: 'data' }); 28};

投稿2018/06/16 09:19

yhg

総合スコア2161

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問