この記事では主に、フロントエンドとバックエンドのリアルタイム メッセージ同期を実現するための Vue を紹介します。興味のある方は参考にしていただければ幸いです。
最近、ビジネスにおいてサーバーとクライアント間のリアルタイム通信機能を実現する必要があるので、Signalrについて少しまとめて整理してみました。
SignalR は、ASP.NET のライブラリとして、アプリケーションにリアルタイムのサーバー側とクライアント側の双方向通信機能を簡単かつ便利に提供できます。
SignalR には、クライアント側に接続とハブという 2 つの API があります。
送信されるメッセージの形式が特定で変更されていない場合など、特殊な場合には、Connections API を使用します。
ハブは、接続 API のより高度な実装であり、クライアントとサーバーが相互にメソッドを直接呼び出すことができるため、ほとんどの場合に使用されます。実際のアプリケーションの特定のシナリオでは、たとえば、サーバーが新しい注文を取得すると、クライアントの印刷メソッドを呼び出します。クライアントが印刷を完了した後、サーバーの注文ステータス更新メソッドを呼び出します。
以下はフロントエンドのハブのAPIを紹介します
生成されたプロキシ
生成されたプロキシを使用する場合、サーバー上で直接メソッドを呼び出すのと同じように、構文レベルでサーバー側のメソッドを呼び出す方が簡単です。
以下はサーバー側のコードです。これはチャットメッセージをリストに追加することを意味します
1 2 3 4 5 6 7 | public class DemoChatHub : Hub
{
public void NewChatMessage(string name, string message)
{
Clients.All.addMessageToList(name, message);
}
}
|
ログイン後にコピー
クライアントが呼び出すとき:
1 2 3 4 5 6 7 8 9 10 | var demoChatHubProxy = $.connection.DemoChatHub;
demoChatHubProxy.client.addMessageToList = function (name, message) {
console.log(name + ' ' + message);
};
$.connection.hub.start().done( function () {
$('#newChatMessage').click( function () {
demoChatHubProxy.server.newChatMessage($('#displayname').val(), $('#message').val());
});
});
|
ログイン後にコピー
生成されたプロキシが使用されないとき、クライアントが呼び出すとき
1 2 3 4 5 6 7 8 9 10 | var connection = $.hubConnection();
var demoChatHubProxy = connection.createHubProxy('demoChatHub');
demoChatHubProxy.on('addMessageToList', function (name, message) {
console.log(name + ' ' + message);
});
connection.start().done( function () {
$('#newChatMessage').click( function () {
demoChatHubProxy.invoke('newChatMessage', $('#displayname').val(), $('#message').val());
});
});
|
ログイン後にコピー
しかし、Vue プロジェクトでは、フロントエンドとバックエンドが分離されている場合、次のように参照されません:
1 | <script src= "@Url.Content(" ~/signalr/hubs ")" type= "text/javascript" ></script>
|
ログイン後にコピー
そして、クライアント メソッドで複数のイベント ハンドラーを使用したい場合は、生成されたプロキシは使用できません。
したがって、次の例では、生成されたプロキシを使用しません。
1. 接続を確立する方法
1 2 3 4 5 6 7 8 | var connection = $.hubConnection('localhost:23123');
var demoChatHubProxy = connection.createHubProxy('demoChatHub');
demoChatHubProxy.on('addMessageToList', function (userName, message) {
console.log(userName + ' ' + message);
});
connection.start()
.done( function (){ console.log('Now connected, connection ID=' + connection.id); })
.fail( function (){ console.log('Could not connect'); });
|
ログイン後にコピー
接続を開始する前 (start メソッドを呼び出す前) に、少なくとも 1 つのイベント処理メソッドを登録することが最善であることに注意してください。登録すると、Hubs の OnConnected メソッドが呼び出されなくなり、サーバーからクライアントのメソッドを呼び出すことができなくなります (トラブルになりやすいため、事前にメソッドを登録しておく必要があります)。
2. クライアントがサーバー側メソッドを呼び出す方法
サーバーを呼び出すときにメソッド名の最初の文字を大文字にする必要がないことに注意してください。 -end 設定が必要です。
1 | demoChatHubProxy.invoke('newChatMessage', {name:'a',message:'b'});
|
ログイン後にコピー
3. サーバーはクライアント メソッドを呼び出します
まず、クライアントは、サーバーによって呼び出される前に、メソッドを登録する必要があります。
1 2 3 | demoChatHubProxy.on('addMessageToList', function (userName, message) {
console.log(userName + ' ' + message);
});
|
ログイン後にコピー
4 Vue プロジェクトで SignalR を使用する
まず、SignalR パッケージをインストールします。SignalR は jQuery に依存していることに注意してください。
npm私はsignalr、jquery
、利便性のために、webpack.base.conf.js
rreee
でグローバルjqueryを登録します。
現時点では、Vue プロジェクトで SignalR を使用でき、バックエンドの関連構成は一時的にスキップされます。
新しいsignalr.jsを作成する
1 2 3 4 5 6 7 | plugins: [ new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
'root.jQuery': 'jquery'
})
]
|
ログイン後にコピー
このように、コンポーネントにsignalr.jsを導入した後、startConnectionメソッドを呼び出して接続を確立します。
関連する推奨事項:
Pythonは、itchatに基づいてWeChatグループメッセージ同期ロボットを実装します
以上がVue は、SignalR フロントエンドとフロントエンドのリアルタイム メッセージ同期実装メソッドを組み合わせていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。