2012-02-11 25 views
0

のWebSocketを持つ:WebSocketのデータ解析のNode.jsクライアント上

socket.send('helloworld'); 

のWebSocketのNode.js上:

socket.ondata = function(d, start, end){ 
    // I suppose that the start and end indicates the location of the 
    // actual data 'hello world' after the headers 
    var data = d.toString('utf8', start, end); 

    // Then I'm just printing it 
    console.log(data); 
}); 

が、私は、この取得しています:端末上�����]���1���/��を:O

私はこの文書を理解しようとしました:http://tools.ietf.org/html/rfc6455#section-5.2しかし、どうすればいいのかわからないので理解しづらいです。toStringでもデータが見えませんか?

私はこの質問に答えようとしましたが、この答えはHow can I send and receive WebSocket messages on the server side?でしたが、私はそれをうまく動作させることができません。この答えは、このような配列を得ていました[false、true、false、false、true、true、false ] etc ...そして、私は本当にそれをどうするのか分からない。:\

私はちょっと混乱しています。クライアント側からデータを取得したらどうしたらいいですか?本当のメッセージ?

私は元のクライアント側とnode.js APIをライブラリなしで使用しています。

+0

'元のクライアント側とnode.js APIをライブラリなしで使用しています。なぜ' socket.io'ライブラリを使用しないのですか? – pkyeck

+3

@pkyeck WebSocketの仕組みを理解したいので、socket.ioには何の問題もありません。私はすでにそれを使用していますが、もっと深くしたいと思っています。 – Adam

答えて

1

あなたはどのnode.jsライブラリを使用していますか? HTTPサーバーAPIのように見えるsocket.ondataにフックしていると判断してください。 WebSocketsはHTTPではありません。 WebSocketとHTTPサービスが同じポート上に存在できるように、HTTP互換のハンドシェイクを持っていますが、それは類似点が終わるところです。ハンドシェイクの後、WebSocketsは、HTTPよりも通常のTCPソケットに似たフレーム化された全二重の長命メッセージ転送です。

node.jsで独自のWebSocketサーバーを実装する場合は、ソケットライブラリを直接使用する(または既存のWebSocketサーバーコードをビルド/借用する)ことができます。ここで

は、TCPソケットへのWebSocketからブリッジのNode.jsベースのWebSocketサーバーです:https://github.com/kanaka/websockify/blob/master/other/websockify.js注それは(私はまだそれを更新する機会や動機を持っていなかった)プロトコルの以前のHixieバージョンのためのものであること。最新のHyBIバージョンのプロトコルは非常に異なっていますが、その実装から有用な情報を集めることができるかもしれません。

+0

ありがとう私は、任意の外部ライブラリ、ちょうどオリジナルのAPIのを使用していないと述べたように、 'socket.ondata'はHTTP更新イベント、' server.on(「更新」、機能(要求、ソケットからあなたの答えのために非常に多くの来、head){ソケット。データ...}) '。私の問題は、それがのWebSocket APIドキュメントに書いて、私はデータを見ることができない、私は私が作業する必要があるかわからない、私はそれを得ることであるが、非常に判読できない形で、私はすべてのルールを使用することはできませんあなたが私が本当に幸せになる部分を理解するのを助けることができるならば、私はどんなスキームも見ないので、問題は私が 'socket.ondata'からデータをデコードできないことです。 – Adam

+0

@CIRK ** WebSocketはHTTP **ではないため、WebSocket用のHTTPライブラリを使用することはできません(最初のハンドシェイクは類似していますが、類似点は終了します)。下位レベル(たとえば、ソケットレベル)で作業する必要があります。 [faye-websocket-node](https://github.com/faye/faye-websocket-node) – kanaka

+0

のような既存の実装を参照してみてください。どういう意味ですか? HTTPサーバーの代わりにTCPサーバーを作成する必要がありますか? – Adam

0

二つのものがあります -

  1. バージョンを使用しているのNode.jsの?私は開始と終了でデータイベントを見たことがない。放出されるイベントは、buffer/stringを引数とする単なるデータです。

  2. さらに重要なことに、HTTPソケットに接続する場合は、HTTPパケットを処理する必要があります。それは、聞き手、ボディと予告編が含まれています。そこにゴミがあるかもしれません。

+0

@Satyam Shekharさん、ありがとうございます。node.jsのバージョンは6.0です。よく始まり、空ではありません。両方の数字ですが、私はすでにテストしましたが、ちょっとチュートリアルに従っています。 。私はあなたの2点を本当に理解していません。\ – Adam

+0

'ondata'は内部的に使用されるプロパティです。あなたが助けることができるものではありません。 – Brad

1

あなたは、実際には、NodeのHTTP APIで開始することができます。 WebSocket-Nodeモジュールを書くときに私が行ったことです。https://github.com/Worlize/WebSocket-Node

既存のWebSocketライブラリ(実際には既存のライブラリを使用する必要がありますが)を使用したくない場合は、 RFCによって定義されたバイナリデータフォーマット。フォーマットやデータの解釈方法は非常に明確です。各フレームからすべてのフラグを読み込み、フレームサイズを解釈し、マスキングキーを読んで、ワイヤから読み込んだときに内容のマスクを解除する必要があります。

WebSocketでは、WebSocketでは、すべてのクライアントからサーバーへの通信は、おそらくキャッシュを中毒することに対するセキュリティ上の予防策として、XORを使用してコンテンツにランダムマスクを適用することによって難読化されています。 WebSocketについて知らない古いプロキシサーバー

関連する問題