私finagleサーバーの問題は、:スリフトデバッグ:finagleとScalaで実装され、私はシンプルなスリフトサーバーを持っている
import com.twitter.util.{ Await, Future }
import com.jakiku.thriftscala.{ RealTimeDatabasePageImpressions, PageImpressions }
import com.twitter.finagle.Thrift
import com.twitter.finagle.thrift.ThriftServerFramedCodec
import com.twitter.finagle.builder.{ ServerBuilder, Server }
object ThriftServer {
def main(args: Array[String]) {
val server = Thrift.serveIface("localhost:9090", new RealTimeDatabasePageImpressions[Future] {
def getByTrackIdAndDay(trackId: Int, day: Int) = {
Future(Seq(PageImpressions.apply(123, 3, 4, 3, 2000L, 2000L)))
}
})
Await.ready(server)
}
}
は、これは私のスリフトファイルです:私はScalaの倹約クラスを生成
namespace java com.jakiku.thriftjava
#@namespace scala com.jakiku.thriftscala
typedef i64 long
typedef i32 int
struct PageImpressionsSum{
1: required int trackId;
2: required int day;
3: required int hour;
4: required int minute;
5: required string pageId;
6: required long uniqueImpressions;
7: required long sumImpressions;
}
struct PageImpressions{
1: required int trackId;
2: required int day;
3: required int hour;
4: required int minute;
6: required long uniqueImpressions;
7: required long sumImpressions;
}
service RealTimeDatabase_pageImpressions{
list<PageImpressions> getByTrackIdAndDay(1:int trackId, 2:int day);
}
service RealTimeDatabase_pageImpressionsSum {
list<PageImpressionsSum> getByTrackIdAndDay(1:int trackId, 2:int day);
}
スクルージと一緒に。依存関係としてthriftlib、scrooge-core、scrooge-generatorなどを追加しました。私はまた、scrooge sbtプラグインを追加しました:
addSbtPlugin("com.twitter" % "scrooge-sbt-plugin" % "4.5.0")
私はsudo sbt 'run'でサーバを起動しました。コンソールの出力:Finagleバージョン6.34.0:
は、[情報] 舞25、2016 ThriftServer 4時18分39秒AMを実行com.twitter.finagle.Init $$ anonfun $ 1 $ MCV $ SP 情報を適用します(rev = 44f444f606b10582c2da8d5770b7879ddd961211)20160310-155158
現時点では問題はありません。私はnodejsでサーバーをテストしました。動作しません。私はまた、リサイクルPythonテストスイートを使用しました。すべてのチェックはタイムアウトになります。
var thrift = require('thrift');
var Realtime_pageImpressions = require('./gen-nodejs/RealTimeDatabase_pageImpressions.js');
var ttypes = require('./gen-nodejs/RealTimeDatabase_types.js');
var connection = thrift.createConnection("localhost", 9090);
connection.on('error', function(err) {
console.log(err);
});
var client = thrift.createClient(Realtime_pageImpressions, connection);
client.getByTrackIdAndDay(123124, 4, function(err, response) {
if (err) {
console.error(err);
} else {
console.log(response);
}
});
私は本当に私が間違ってやっている見当がつかない:
これはnodejsクライアントです。
ThriftServerFramedCodecはインポートされますが使用されません。変更しましたが、これは解決策ではありません。 –