Socket.ioとRestfulはどのように連携できますか?
-
27-10-2019 - |
質問
(私はRestfulに馴染みがありません、私のコンセプトが間違っている場合は私を修正してください)
Restfulアーキテクチャでは、すべてのアクションをURLにマッピングします。 「記事の投稿」をクリックすると、実際にURLになりますか http://example.com/
およびいくつかのデータ action=post&content=blahblah
.
投稿したいが、Webページ全体を更新しない場合は、JavaScriptのXMLHTTPREQUESTを使用できます。投稿してから、コンテンツを取得し、ページのDIVに挿入します。これらのアクションはすべて非同期です。
それから私は名前が付けられたものがあることを知っています WebSocket
そして、それはラッパーです socket.io
. 。 「メッセージ」を使用して、クライアントとサーバー間で通信します。 [投稿]をクリックすると、クライアントが電話するだけです socket.send(data)
サーバーを待ちます client.send(data)
. 。それは魔法です。しかし、URLはどうですか?
2つのモデルを繰り返すことなく使用することは可能ですか?言い換えれば、すべてのアクションにはURLがあり、それらのいくつかはユーザーと本物のタイミングと対話できます(socket.io?)
さらに、私はこれをすべきですか?非常にインタラクティブなWebプログラム(Ex。Games)では、Restfulはまだ意味がありますか?
解決
HTTPを介して休むためにマップするアクションのハンドラーを定義しています。投稿して取得すると、通常、エンティティよりも更新とクエリを参照してください。両方のコンテキストで使用できるこれらのCRUD操作の一般的なバージョンのハンドラーを定義できない理由はまったくありません。私が一般的にこれを行う方法は、リアルタイムトランスポートに「ルート」の概念を導入し、それらを同じCRUDハンドラーにマッピングすることです。
セッションがあり、同じACLなどを課すことができます。
+---------------------------------+
| |
| BROWSER |
| |
+--+--^-------------------+---^---+
| | | |
| | | |
+--v--+---+ +--v---+---+
| | | |
| HTTP | | SOCKET.IO|
+--+---^--+ +--+---^---+
| | | |
+--v---+------------------v---+---+
| |
| ROUTING/PUBSUB |
+-+--^-------+--^-------+--^------+
| | | | | |
+-v--+--+ +-v--+--+ +-v--+-+
| | | | | |
| USERS | | ITEMS | |ETC |
+-------+ +-------+ +------+
ENTITY CRUD HANDLERS
他のヒント
私 これを私のブログに投稿しました 近々:
WebSocketsのCRUD APIの設計
構築するとき 溶接, 、RESTとWebSockets(socket.io)の両方を使用しています。 WebSocketの3つの観察結果:
- WebSocketsは非常に自由な形式であるため、イベントに必要な方法で名前を付けることができますが、最終的にはデバッグすることは不可能になります。
- WebSocketsには、HTTPのリクエスト/応答形式がないため、イベントがどこから来ているのか、または行く場所を知るのが難しい場合があります。
- WebSocketがアプリ内の既存のMVC構造に適合し、できればREST APIと同じコントローラーを使用できればいいでしょう。
私の解決策:
- サーバーに2つのルーティングファイルがあります。 routes-rest.js と Routes-sockets.js
- 私のイベントはこの例のように見えます:
"AppServer/user/create"
. - 私が使う フォワードスラッシュ (「/」)イベントをルーティングパスのように見せます。
- 最初の文字列はです 目標 (〜」これが実際にパスだった場合)。
- 2番目の文字列はです モデル.
- 3番目の文字列はです CRUD動詞: :つまり、作成、読み取り、更新、削除。