0

私は確かに、サーバー、Linux、およびWebSocketのすべてにおいて完全な初心者です。私はついに、UNIXコマンドラインナビゲーションやサーバー理論などを学びながら、CFMページに接続して提供できるApache、Tomcat、およびRailoを実行するVMをセットアップすることができました...

これが私の問題です-RailoWebSocket拡張機能は1つしかなく、それは非常に厄介です(サービスを開始するためだけに、CFCを変更する必要がありました)が、WebSocket接続を確立できません(「予期しない」状態が続くGoogle Chromeのコード200")。最小限のドキュメントがありますが、これはまったく役に立ちません。

基本的に、私はWebSocketを使用する将来のプロジェクトのためにいくつかのプロトタイピングを行おうとしています。Railoは、その速度、セキュリティ、および非常にデータベースの重い操作に対する優れた機能で気に入っています。Nodeに興味がありますが、CFMLでできるのと同じセキュリティとDB機能をJavascriptから取得する方法がわかりません。

だから私はいくつか質問があります:WebSocketサーバーのための私の最良のオプションは何ですか?ApacheやTomcatを使用する必要がありますか?人々は、Node.jsのようなものがWebSocket部分を実行し、他の何かがその背後で重労働を行うことはまったく価値がないと言い続けています-これはなぜですか?正しい方向に微調整することができれば、どんな言語でもWSハンドラーを書くことができて、とてもうれしいです。いくつかの優れたチュートリアル(この部門ではあまり見つけられないようです)、またはその方法についての良いフィードバックがあります。基礎を固め、WebSocketを処理するようにLinuxボックスをセットアップします。できれば、WebSocketとRailoのような堅牢な言語の両方を処理する方法を設定します。

4

3 に答える 3

3

Railo 拡張機能は、私にとっては問題なく動作します。デバッグできるようにテスト コードを提出するのはどうでしょうか。もちろん、websockets プロジェクトは非常に若く、完全に展開されています。そのため、気軽にフォークして、パッチや提案を提出してください。たくさんのオプションがあります:

于 2012-05-26T13:29:26.297 に答える
0

「予期しないコード200」は、RailoのWebソケットサーバーが古い応答を送信したことが原因です。彼らはWebソケットの仕様を変更し、Chromeは新しい仕様を使用しています。

The problem seems to be caused by chrome & co implementing the new spec, "draft-ietf-hybi-thewebsocketprotocol-17". It requires the server to respond with "HTTP/1.1 101 Switching Protocols" rather than 200 OK.

ここでの解決策は、Railo Webソケット拡張機能を自分で更新するか、他の解決策を使用することです。

これは、PHPで記述されたWebソケットチャットサーバーの完全なデモです。

http://www.flynsarmy.com/2012/02/php-websocket-chat-application-2-0/

私はこれを自分で使用して、横になっていたArchLinuxマシンから提供されるリアルタイムのHTMLチャットを実装しました。構成は、ApacheとPHPをセットアップし、index.htmlとserver.phpのIPアドレスをサーバーマシンの外部IPアドレスに変更するだけで構成されていました。

このflynsarmyデモには、PHPWebSocketの最新バージョンが含まれています。これは、完全にPHPで記述され、単一のファイルに含まれているオープンソースのWebソケットサーバーです。デモは、接続、メッセージ受信、切断の3つのコールバックにフックします。

私にとって重要なことは、Webソケットプロトコルはバイナリではなくテキストのみをサポートしているため、独自のチャットアプリ用に拡張する際に、サーバーの制御に役立つ独自のコマンドを実装する必要があったことです。私の場合のコマンドは次のようになりました。

!kickusers: username, another_username, a_third_username

私のサーバーコードは、すべてのメッセージの最初の文字に「!」がないかチェックします。存在する場合は、コマンドとして扱います。次に、文字列をスライスして、コマンド「kickusers」とキックするユーザーのリストを取得します。次に、適切なキック関数を呼び出して、ユーザー名の配列を渡します。

私のシナリオはチャットクライアントだったので、これはユーザーが文字通りこのコマンドをチャットに入力でき、サーバーがそれを受け入れて応答することを意味しました。

これらすべてが私のサーバーにデプロイされる方法は次のようになります。

  • ユーザーがブラウザでサーバー上のその場所に移動すると、Apacheにindex.htmlページを提供させます。ここでApacheが果たす唯一の目的は、index.htmlを要求したクライアントに提供することです。
  • index.htmlページには、チャットを表示するためのhtmlと、サーバーとの間でチャットを送受信するためのjavascriptが含まれています。基本的に、index.htmlはHTMLとJavascriptで記述されたチャットクライアントであり、ブラウザで実行されます。
  • サーバー上でsshを介してserver.phpを実行し、WEB SOCKETサーバー(Apacheとは完全に別)を起動します。このサーバーは、そこに配置され、接続されている他のクライアントへのテキストのエコーなどのチャットを処理します。

ApacheとPHPのインストールに関するArchwikiは、ApacheとPHPパッケージをインストールする方法でArchに固有ですが、ApacheとPHPの構成に関するセクションはすべてに適用されます。必要に応じて、Googleクエリを保存し、ここにリンクを表示します:https ://wiki.archlinux.org/index.php/LAMP

プロトタイピングに関して、私がFlynsarmyのチャットデモへのリンクを提供した理由は、彼のコメントが役に立ち、彼がそれについてブログを書いたためです。これは、phpのWebソケットで何かを行う方法の非常にシンプルで完全な例です。

于 2012-05-25T21:06:33.107 に答える
0

node.js の主な問題は、モノスレッドであることです。それを使用してバックグラウンド タスクを実行することはできず、ローカル IO がサーバーをブロックします。

私が使用するソリューションはGoです。これは非常に高速で、非常に優れた同時実行機能を備えており、websocket と json ライブラリが統合されています (サンプル: http://gary.beagledreams.com/page/go-websocket-chat.html )。数十行の Go で効率的な Web アプリケーション サーバーが作成されます。インターネット上のドキュメントは、Java や node.js よりもはるかに少ないことがわかります。

Java には websocket の実装がいくつかありますが、Java にあるすべてのものを Go に切り替える過程にあるため、それらをテストしていませんでした。Java での json エンコーディングに Google gson を使用していることは知っていますが、これは非常に優れています。

于 2012-05-25T19:33:33.723 に答える