2017-04-15 12 views
0

私は自分のGoogle firebaseのproyectに機能フォルダに置かindex.jsファイルに次のコードを持っている:私は、コマンドプロンプトで\gfp1>firebase deployを実行するとsocket.ioをGoogle Firebaseアプリの機能に接続するにはどうすればいいですか?

net=require('express')() 
net.get('/',function(req,res){res.sendFile(__dirname+'/slave.htm')}) 
exports.run=require('firebase-functions').https.onRequest(net) 
require('socket.io').listen(net).on("connection",function(socket){}) 

はしかし、これは私を与えることでエラー:

You are trying to attach socket.io to an express request handler function. Please, pass a http.Server instance.

はい、私は合格し、次のコードでHTTP Serverインスタンス:

net=require('firebase-functions').https.onRequest((req,res)=>{res.send("socket.io working!")}) 
exports.run=net;require('socket.io').listen(net).on("connection",function(socket){}) 

は、それが再び次のエラーが私を与える:

You are trying to attach socket.io to an express request handler function. Please, pass a http.Server instance.

そして、私はそのコードでfirebase機能にsocket.ioを装着してみてください。

net=https.onRequest((req,res)=>{res.send("socket.io working!")}) 
exports.run=require('firebase-functions').net 
require('socket.io').listen(require('firebase-functions').net).on("connection",function(socket){}) 

そして、それは、このエラーを与える:

https is not defined

私はローカルホストでこのコードを実行すると:

app=require('express')() 
app.get('/',function(req,res){res.sendFile(__dirname+'/slave.htm')}) 
net=require('http').createServer(app);net.listen(8888,function(){console.log("Server listening.")}) 
require('socket.io').listen(net).on("connection",function(socket){}) 

コンソールemmit \gfp>Server listening.、と私はhttp://127.0.0.1:8888をURLに行くとき、それは私が予想通り、ナビゲーターにhtmlファイルを送信する作品:

<script> 
document.write("File system working!") 
document.body.style.backgroundColor="black" 
document.body.style.color="white" 
</script> 

しかし、私はnet=exports.run=require('firebase-functions').https.onRequest((req,res)=>{res.send("Firebase working!")})net=require('http').createServer(app);net.listen(8888,function(){console.log("Server listening.")})を変換しようとすると問題が発生し、不可能であると思われます。

答えて

3

クラウド機能で一部のポートでリッスンするコードを実行することはできません。これは、コードを実行するマシンまたはインスタンスが1つしかないことが保証されていないためです。すべてが同時に実行されている多くのインスタンスに分散させることができます。そのことが起こったかどうかは気にするべきではありません。クラウド機能は、お客様の機能に必要なものを満たすだけのスケールになります。

HTTPタイプの機能をデプロイすると、httpsポートでプロジェクトの専用ホストを自動的にリッスンし、Web要求を送信できます。

永続的に保持されているソケットを使用してトランザクションを実行する場合は、データベース内のリアルタイムデータベースクライアント書き込み値を使用し、書き込みを行うデータベーストリガー機能を使用して書き込みに応答します。この関数は、クライアントがリッスンしている場所のデータベースに何かを書き戻すことで、クライアントにデータを返すことができます。

+1

申し訳ありませんが、私はリアルタイムデータベースを使用する方法を疑問に思う新しい質問を書く必要がありますか? – Cronex

+1

おそらくドキュメントを読んで、まず自分で何かを実装したいと思うでしょう。スタックオーバーフローは、幅広く自由な質問には適していません。 –

関連する問題