wsモジュールガイド+Vueオンラインチャットルーム
7091 ワード
概要
wsモジュールはノード側のWebSocketプロトコルの実装であり、クライアント(一般的にブラウザ)の永続化とサービス側の接続を可能にする.
このような連続接続可能な特性により、WebScoketはゲームやチャットルームなどの使用シーンに特に適する.
wsモジュールは他のWebSocketプロトコルに基づくモジュールに比べて非常に純粋である.彼はWebSocketプロトコルに基づく実装のみに注目し、他の例えば
WebSocketプロトコルは非常に簡単で有効に設計されており、知らなかった友达はまず理解することができます.ここにはWebSocketプロトコルを紹介する文章がいくつか添付されています.
https://developer.mozilla.org...
http://www.ruanyifeng.com/blo...
https://www.cnblogs.com/fuqia...
この文章は主に以下の部分に分けられます. wsモジュール紹介 ws構築サーバ ws作成クライアント wsはVueと協力して簡単なオンラインチャットルーム を作成した.
本論文で用いるwsバージョンは
wsモジュールの紹介
wsモジュールは基本的に2つの部分に分けられ、以下の特徴があります. serverセクション wsモジュールを用いるストリーミング を構成することができる.既存のHttp/sサーバに基づいて接続を確立する 内部のHttpモジュールに基づいてサーバ を直接確立する手動制御プロトコルのアップグレード clientセクション ブラウザ側とほぼ一致するAPIのクライアント実装
wsモジュールの導入:
サーバの作成:
クライアントの作成:
wsサーバの構築
wsサーバの構築は、1つのHttpサーバに基づいてもよいし、内部のHttpサーバを用いてもよいし、後述例を簡単に説明するために内部サーバを用いる.
wsモジュールのサービス側の作成と使用は、ノードに非常に類似したHttpモジュールを使用します.
ここで示すべき点は、WebSocketがHttpによるプロトコルアップグレード後にWebSocketプロトコルになることである.
ここでは、
Server側には多くのイベントと属性と方法があります.ここでは一般的なパラメータしか書いていません.詳細な公式ドキュメントは文章の末尾に追加します.
イベント: closeサーバが閉じると がトリガーされます. connectionクライアントとサーバの握手が完了すると がトリガーされます. errorサーバの最下位エラー時に がトリガーされます. headersクライアントがアップグレードプロトコルを要求する要求がトリガーされる.この時点でまだWebSocket通信が確立されていないので、このイベントでHeader をチェックして修正することができます. listeningサーバがリスニングを開始すると がトリガーされます.
属性: server.Clientsの1つのSetオブジェクトは、サーバが確立したすべての接続オブジェクトを保存し、サーバのコンストラクション関数でclientTrackingがTrueの場合にのみ有効です.
方法: close()呼び出し後に内部のHttpサーバを閉じ、データ転送が完了するとすべてのクライアント接続 を自動的に閉じる.
クライアント作成
前述wsモジュールが提供するクライアントAPIは、ブラウザとほぼ一致するが、ブラウザ側よりも豊富な機能を提供する.
例はクライアントを使用します(この例は公式サイトから来ています):
同じクライアントでも豊富なイベント属性と方法が提供されています.ここでは、最も一般的に使用されている内容を簡単に説明します.イベント close接続が閉じるとトリガーされる. errorの最下位エラーの場合、サーバの応答なしによるタイムアウトなどがトリガーされる. messageサーバ送信データが到着すると がトリガーされる. openサーバが接続を確立すると がトリガーされます.
メソッド addEventListener removeEventListener sendサーバにデータを送信するための closeクローズ接続(今回のデータ受信または送信が完了すると) . terminateダイレクトクローズ接続 プロパティ readyState現在接続されている状態合計4つの値0接続のうち1オープン3クローズ中4クローズ(ブラウザ側のステータスコードと完全に一致) .
≪インスタンス|Instance|emdw≫
サーバとクライアントのインタラクション
出力:
ブロードキャストメッセージ
ブロードキャストメッセージの基本原理は、サーバが
公式の例:
ブラウザ側とサーバのインタラクション
サーバ:
ブラウザ:
ブラウザクライアントとwsクライアントの違い
とくせい
エクスプローラ
wsクライアント
onメソッドを使用してイベントを追加する
いけません
できる
addEventListenerの使用
できる
できる
onerror、onclose...
できる
できる
メッセージイベントdataデータ取得
はい
いいえ
readyStateプロパティ
はい
はい
Vue+wsを使用してオンラインチャットルームを作成
コードはgithubに置かれました:
https://github.com/uioz/Simpl...
注:コンストラクションツールは使用されていません.
注意:本プロジェクトのサーバ部分はTSで記述するが、クライアントはTSを使用していない.
参照
npmガイドには、次のものが含まれます.のバイナリデータの転送と圧縮. 外部Http/sサーバはWebSocketの具体的な使用方法にアップグレードする. 1 Http対応複数WebSocketServer 心拍タイムアウト検出. クライアントip取得 https://www.npmjs.com/package/ws
APIマニュアル:
https://github.com/websockets...
wsモジュールはノード側のWebSocketプロトコルの実装であり、クライアント(一般的にブラウザ)の永続化とサービス側の接続を可能にする.
このような連続接続可能な特性により、WebScoketはゲームやチャットルームなどの使用シーンに特に適する.
wsモジュールは他のWebSocketプロトコルに基づくモジュールに比べて非常に純粋である.彼はWebSocketプロトコルに基づく実装のみに注目し、他の例えば
Socket.io
は、WebSocketが使用できない場合にポーリングを利用して永続化接続をシミュレートするフォールバック手段を提供する.WebSocketプロトコルは非常に簡単で有効に設計されており、知らなかった友达はまず理解することができます.ここにはWebSocketプロトコルを紹介する文章がいくつか添付されています.
https://developer.mozilla.org...
http://www.ruanyifeng.com/blo...
https://www.cnblogs.com/fuqia...
この文章は主に以下の部分に分けられます.
本論文で用いるwsバージョンは
6.1.0
である.wsモジュールの紹介
wsモジュールは基本的に2つの部分に分けられ、以下の特徴があります.
wsモジュールの導入:
const WebSocket = require('ws');
サーバの作成:
const wss = new WebSocket.Server({
port:8080
});
クライアントの作成:
const ws = new WebSocket('ws://127.0.0.1:8080');
wsサーバの構築
wsサーバの構築は、1つのHttpサーバに基づいてもよいし、内部のHttpサーバを用いてもよいし、後述例を簡単に説明するために内部サーバを用いる.
wsモジュールのサービス側の作成と使用は、ノードに非常に類似したHttpモジュールを使用します.
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 }); //
wss.on('connection', function connection(ws) { // , client
ws.on('message', function incoming(message) {
console.log(' ', message);
});
ws.send('something'); //
});
ここで示すべき点は、WebSocketがHttpによるプロトコルアップグレード後にWebSocketプロトコルになることである.
connection
のイベントにおける最初のパラメータがClientオブジェクトであることは、実際にはwsモジュールのクライアントインスタンスである.wsモジュールは、このオブジェクトを用いて接続オブジェクトを記述する.2番目のパラメータは、http.IncomingMessage
のオブジェクトである、Cookie
のような要求パラメータを取得するために利用することができる.ここでは、
connection
のイベントの最初のパラメータがws
のインスタンスオブジェクトであることを覚えておけばよいが、後でこのオブジェクトについて説明する.Server側には多くのイベントと属性と方法があります.ここでは一般的なパラメータしか書いていません.詳細な公式ドキュメントは文章の末尾に追加します.
イベント:
属性:
方法:
クライアント作成
前述wsモジュールが提供するクライアントAPIは、ブラウザとほぼ一致するが、ブラウザ側よりも豊富な機能を提供する.
例はクライアントを使用します(この例は公式サイトから来ています):
const WebSocket = require('ws');
const ws = new WebSocket('wss://echo.websocket.org/', {
origin: 'https://websocket.org'
});
ws.on('open', function open() { //
console.log('connected');
ws.send(Date.now());
});
ws.on('close', function close() {
console.log('disconnected');
});
ws.on('message', function incoming(data) { //
console.log(`Roundtrip time: ${Date.now() - data} ms`);
setTimeout(function timeout() {
ws.send(Date.now());
}, 500);
});
echo.websocket.org
このサイトには簡単なwebSocketのサーバが提供されており、ノードで上記の例を直接実行することができます.同じクライアントでも豊富なイベント属性と方法が提供されています.ここでは、最も一般的に使用されている内容を簡単に説明します.
≪インスタンス|Instance|emdw≫
サーバとクライアントのインタラクション
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log(' :', message);
});
//
ws.send(' ');
});
const ws = new WebSocket('ws://127.0.0.1:8080');
ws.on('open', function open() {
//
ws.send(' ');
});
ws.on('message', function incoming(data) {
//
console.log(' ',data);
});
出力:
:
ブロードキャストメッセージ
ブロードキャストメッセージの基本原理は、サーバが
connection
イベント中に伝達するクライアントオブジェクトを取得し、クライアントオブジェクトを収集し、send
メソッドを反復的に呼び出すことである.公式の例:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
// ,
wss.broadcast = function broadcast(data) {
//
wss.clients.forEach(function each(client) {
//
if (client.readyState === WebSocket.OPEN) {
//
client.send(data);
}
});
};
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(data) {
//
wss.clients.forEach(function each(client) {
// ,
if (client !== ws && client.readyState === WebSocket.OPEN) {
//
client.send(data);
}
});
});
});
ブラウザ側とサーバのインタラクション
サーバ:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log(' :', message);
});
//
ws.send(' ');
});
ブラウザ:
const client = new WebSocket('ws://127.0.0.1:8080');
client.addEventListener('open',()=>{
//
client.send(' ');
});
client.addEventListener('message',(data)=>{
//
console.log(' ', data);
});
ブラウザクライアントとwsクライアントの違い
とくせい
エクスプローラ
wsクライアント
onメソッドを使用してイベントを追加する
いけません
できる
addEventListenerの使用
できる
できる
onerror、onclose...
できる
できる
メッセージイベントdataデータ取得
はい
いいえ
readyStateプロパティ
はい
はい
Vue+wsを使用してオンラインチャットルームを作成
コードはgithubに置かれました:
https://github.com/uioz/Simpl...
注:コンストラクションツールは使用されていません.
注意:本プロジェクトのサーバ部分はTSで記述するが、クライアントはTSを使用していない.
参照
npmガイドには、次のものが含まれます.
APIマニュアル:
https://github.com/websockets...