問題タブ [java-server]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 高負荷Javaサーバー
マルチプレイヤーゲームを作っています。今、Androidデバイスをサーバーに接続するテクノロジーを選択しようとしています。クライアントは Android で動作し、ゲームは MMORPG です。サーバーをJavaで書きたいと思います。今のところ、私はそれについて3つのアイデアしか持っていません:
1) プレーン Java とソケットを使用したマルチスレッド環境の作成。これにより、ゲームクライアントとサーバー間の全二重接続がより簡単になります。しかし、次の懸念があります。
1.1) ゲームは多数のオブジェクトを持つ MMORPG であり、たとえば 5000 人が同時にプレイしている場合、そのようなソリューションがどのようにスケーリングされるかわかりません。Java マシンで実行できるスレッドの数は? どうすればそれを概算できますか?1 つのスレッドが各ソケットを読み取り、1 つのスレッドがソケットに書き込みを行っている場合 (つまり、1 人のプレイヤーに対して 2 つのスレッド)。
1.2) プレイヤーの数が増えた場合、自分で作成した jar アーカイブを拡張して複数のサーバーに配布するにはどうすればよいですか? たぶん、それを行うための特別なトリックがありますか?
1.3) 多くのプログラミング オーバーヘッド - ソケット API は非常に低レベルです。
2) HTTP 要求を処理するためのサーブレット インターフェイスを作成します。
2.1) 各プレイヤーが自分のセッションを持っている限り、セッション (および承認) を簡単に制御できます。
2.2) は、Java EE EJB などに接続できます。システム レベルのプログラミングに伴う多くの複雑さが解消されます。そのため、ビジネス ロジックの作成に専念できます。
2.3) HTTP を使用するすべてのタイプのクライアント (モバイル デバイス + ブラウザー) にサービスを提供できます。
2.4) 高速 - 1 つのサーブレット コンテナーでも 1 秒あたり数千のリクエストを処理できるため、非常に高速です。
2.4) しかし、このアプローチは全二重通信を提供できません。更新を確認するために、1 秒ごとにリクエストを送信する必要があります。ゲームはターン制であるため、1 秒の遅延はゲームに大きな影響を与えませんが、それでも大量のトラフィックが生成されます。プレイ人数が多い場合は可能ですか?COMET テクノロジーについて聞いたことがありますが、サーバーが多くのメッセージを連続してプッシュする必要がある場合でも、毎回リクエストを送信する必要があるようです + このテクノロジーはまだ十分に確立されていません。
3) ソケットを作成し、JMS を介して Java EE サーバーに接続します。
3.1) クライアントとサーバー間の全二重通信を可能にし、Java EE のすべての優れた機能を提供するため、クールです。後で、サーブレット インターフェイスを介してブラウザに拡張できます。
3.2) ある種のオーバーエンジニアリングのようです。それは本当に人々がそれをする方法ですか?つまり、それは正しい方法ですか?正気の開発者がそんなことをするだろうか?
選択の参考になれば幸いです。私はそのような仕事をした経験があまりありません。そして、ベストプラクティスに固執したいと思います。
google-app-engine - Google App Engine と localhost でのウェブサイトの動作が異なる - urlmapping
私はtQueryCarでいくつかのことをしようとしていました: http://learningthreejs.com/blog/2012/05/21/sport-car-in-webgl/
新しいアプリ エンジン プロジェクトを作成し、必要な作業を行ったところ、この webGL カーはローカルホストで正常に動作していました。しかし、それをアプリ エンジンにアップロードすると、firebug コンソールでエラーが発生します。車を除くすべてがレンダリングされます。これはアプリ エンジンの URL です: http://tquerycar.appspot.com
実際に何が起こっているのか理解できませんでした。すべてがローカルホストで正常に動作しています。
編集:わかりました。私は何が間違っているのかを理解しました。私の tQueryCar HTML コードは、このアドレスに GET リクエストを行っています: http://tquerycar.appspot.com/plugins/car//examples/obj/veyron/parts/veyron_body_bin.js
. しかし、私のweb.xmlでは、URL/
をCarServlet
クラスにマップし、常にindex.html
ファイルを出力しました。したがって、通常のApacheサーバーで機能するように、JavaサーブレットでURLをマップする方法を尋ねたいと思います。そのため、ローカルホストで実行されている apache サーバーでサイトが正常に動作します。
PS私は個人的にJavaサーブレットについてあまり知りません。
java - 静的アクセスに「no-ip」を使用して、自分のコンピューターで Java サーバーをホストする
Android ゲームと独自の Java サーバーを作成しています。そのサーバーを自分のコンピューターで実行したい。他の場所で実行する必要はないので、他のソリューション (有料ホストなど) は本当に必要ありません。コンピューターへの静的 IP アクセスが必要です。現在、no-ip.com を使用してそれを行っていますが、受信したデータへのアクセスに問題があります。私のサーバーでは、DatagramSocket.receive() を使用して特定のポートでリッスンし、反対側では次のようにデータを送信しています。
私は正しいアドレスにデータを送信していることがわかります(同じアドレスのDUCが私に示しています)が、サーバーはそのデータをキャッチしません。
no-ip.com を使用して静的 IP を取得した経験のある方は、助けてください。
PS現在、私はiPhoneテザリングを介してインターネットにアクセスしているため、実際のルーターがないことがこの背後にある理由である可能性があります. ISP が NAT を行っているため、携帯電話でのポート フォワーディングは必要ないと読みました。回避策はありますか?
DUC をコンピュータにインストールするだけで、no-ip で動作するのに十分ですか?
静的 IP を取得する簡単な (無料の) 方法はありますか?
google-app-engine - HTTP 応答ヘッダーで CR+LF が __ に変更される
更新された質問の更新を参照してください
アプリのサービス呼び出しに を使用していAFNetworking
ます。AFHTTPClient
私のサーバーは HTTP ダイジェスト認証を使用して認証します。WWW-Authenticate
サービス呼び出しは、次のようなチャレンジとして、応答にヘッダーを含む 401 HTTP エラーを返しています。
connection:didReceiveAuthenticationChallenge:
メソッドは で呼び出されることはありません。AFURLConnectionOperation
これは、NSURLConnectionDelegate
この状況では であり、 で設定されたブロックを呼び出しますsetAuthenticationChallengeBlock:
。代わりにError Expected status code in (200-299), got 401
、AFHTTPRequestOperation
失敗ブロックでエラーが発生するだけです。
私の知る限り、WWW-Authenticate
HTTP ダイジェスト認証のヘッダーで必須のフィールドはこれらだけです。これは、ウィキペディアのこの例の応答と非常によく似ています。とにかくユーザーに HTML を表示していないため、応答の実際の本文はありません。これは重要ですか?私は不透明なフィールドを使用していませんが、これはオプションである必要があります。「auth-int」の保護品質はサポートしていません。それ以外は、Server
またはDate
ヘッダーを返しません。これらのいずれかが必要ですか?
ここで私が間違っているのは何ですか?
更新:現在、クライアント側で応答ヘッダーをログに記録しています (Apple は、私が知っているプレーン テキストの応答を単純に出力するための適切な方法を提供していません)。上記の応答は、サーバーに記録されているとおりです。の結果NSHTTPURLResponse
allHeaders
は次のとおりです。
Server
およびDate
ヘッダーは、実際にはサーバーに含まれており、他のいくつかのヘッダーも含まれています。サーバーは Google App Engine です。
しかし、問題は、私の\r\n
CR+LF が__
何らかの理由で変換され、ヘッダー構文が台無しになっていることです。その理由を調べてみると…
更新 2:のみを使用する\n
と、_
. HTTP 要件は、ヘッダー内の行を分割するために CR+LF+SPACE を使用することです。HttpServletResponse
それで、私の質問は、正しくエンコードされるように、この CR+LF+SPACE をヘッダー文字列に適切に含めるにはどうすればよいですか? サーバー応答プロセスのどこでエンコーディングが変更され、その結果、_
文字が取得されますか?
これは、応答を作成しているサーバー コードです。
最後の行は、最初に示したように応答を記録するもので、この時点で正しくフォーマットされています。
キャリッジ リターン\r
0x0D とライン フィード\n
0x0A の両方が ASCII アンダースコア_
0x5F に変更されています。
更新 3:これはクライアントの問題ではなく、Google App Engine サーバーが原因であることが確認できました。サービス コールをポスター ツールに投稿すると、同じ結果が得られます。
更新 4: CR+LF 文字を削除し、カンマ区切りの属性をすべて 1 行に含めるとうまくいくようですが、 RFC 2047によれば、行の長さは 75 文字を超えないようにする必要があります。
「エンコードされた単語」は、「charset」、「encoding」、「encoded-text」、および区切り文字を含め、75 文字を超えてはなりません。75 文字の「エンコードされた単語」に収まるよりも多くのテキストをエンコードすることが望ましい場合は、複数の「エンコードされた単語 (CRLF SPACE で区切られた)」を使用できます。
複数行のヘッダー フィールドの長さに制限はありませんが、1 つ以上の「エンコードされた単語」を含むヘッダー フィールドの各行は 76 文字に制限されています。
したがって、CR + LF 文字をヘッダー文字列に正しく配置する方法を理解する必要があります。
更新 5:したがって、HTTP ヘッダーの行ごとに許可される最大文字数はサーバーに依存し、ヘッダーには十分な数千バイトの範囲にある可能性が高いWWW-Authenticate
ようです。しかし、これは、ヘッダー文字列の「\r\n」文字が「__」に変換される理由についての質問にはまだ答えていません。これは Google App Engine のバグですか? CR+LF+SPACE を使用して、HTTP 応答の新しい行でヘッダー属性を分離したのは私だけだとは想像しがたいです。
monitoring - visualvm は自動メール通知を送信できますか
Tomcat 6x でホストされている Web アプリケーションを使用しており、メモリやその他の問題が発生した場合に「自動メール通知」を送信できるように、visualvmなどのサーバー状態監視ツールをセットアップしたいと考えています。JDK(当環境では1.6)に付属のvisualvmを利用する予定なので、
自動電子メール通知を設定する方法があるかどうか、誰か教えていただけませんか?
java - ループ中に文字列を取得する方法
私は2つのクラスを持っています
ファーストクラス
そして二等
このプログラムを実行すると、udp が start であるのに String Hasil が来ないのはなぜですか。ステートメント While (true) で String Hasil を取得するにはどうすればよいですか?
java - JSONObject は null ではありませんが、null のように見えます
私はJavaのJSONObjectに問題があります
バグがあったので、次のテストコードで問題が見つかりました:
すべてがパスしますが、toString() は [null, null] を返すため、配列を fontend に送信すると [null, null] を受け取ります (良くない)
私はいくつかの調査を行い、JSONOBject.null と関係があるようですが、なぜそれが起こるのかわかりません
そして私の toJSON() メソッドは次のようなものです:
java - EJB サーバーはデプロイ後のエラー追跡をサポートしていますか?
私はEJBが初めてです。最近は、特にエンタープライズ アプリケーションにおけるソフトウェアの信頼性について研究しています。EJB アプリケーション サーバーがデプロイ後のエラー追跡をサポートしているかどうか疑問に思っています。
たとえば、EJB アプリケーションを現実の世界にデプロイする場合、非常にわずかな確率でも、システムがサービス (トランザクション、同時実行、垂直、水平サービス、または一般的なビジネス EJB など) のために間違いを犯すことがあります。システムのパフォーマンスに影響します)。その場合、システム全体が停止する場合と停止しない場合があります。私の質問は、EJB アプリケーション サーバーは、これらのエラーに関するすべての情報を認識して記録するエラー追跡 API をサポートしていますか?
ロジックプログラミングに関するすべての間違いは関係ありません。
ありがとう、そして私の下手な英語でごめんなさい。
java - NPE が発生する理由と、再生中のクリップを停止する方法についてサポートが必要です
こんにちは、クリップが既に実行されているときにクリップを停止する方法についての解決策を必死に探しています。今何日も解決策を探していますが、まだ見つかりません。方法を知っている人は私を助けてください。
これが私のコードです
問題は、「stop」というメッセージを受信しても曲は停止せず、「rock2」などの別のメッセージを受信すると、すでに再生中の曲がある場合でも再生することです。このプログラムを修正するのを手伝ってください..
これは私のJavaスタックトレースコンソールです:
3曲すべてを同時に再生できますが、停止することはできません.2つの同じメッセージを送信しようとすると、サーバーがクラッシュし、上記のエラーが表示されます.