icrosoft Signal을 Angular에 연결
![](https://s1.md5.ltd/image/47d554755983dce3e67a3d1160cd3532.jpg)
Rey and Kylo Ren use SignalR to communicate with the force. Image was orginally copied from here
마이크로소프트의 신호기는 매우 강력한 기술로 클라이언트 간의 웹소켓 연결을 실현할 수 있다.이 기술은 이미 오랫동안 존재해 왔지만, 지금은 Azure가 있어서 더욱 쉽게 시작할 수 있다.
마이크로소프트@aspnet/signalr의 소프트웨어 패키지는 Azure와 Angular를 이용하여 Signaler를 이용한 응용 프로그램을 만드는 것을 가능하게 한다.본고에서 나는 채팅 응용 프로그램에서 그것을 어떻게 설정하는지 보여주고 이 과정에서 이 기술을 토론할 것이다.계속하려면 my sample application GitHub repo 을 참조하십시오.
무엇이 신호기 서비스입니까?
SignalR은 마이크로소프트의 기술로 WebSockets를 통해 클라이언트와 서버 간에 실시간 통신을 제공한다.채팅 프로그램, 게임, 계기판, 실시간 업데이트가 필요한 모든 응용 프로그램 등 고주파 응용 프로그램에 사용되는 것을 자주 볼 수 있다.
SignalR은 위탁 관리 기술로 제공되거나 Azure를 이용하여 그들의 SignalR 서비스를 사용할 수 있습니다.Azure Signal 서비스는 웹 클라이언트, 모바일 응용 프로그램, 서버와 사물인터넷 장치를 지원하기 쉽습니다.
신호기는 대형과 소형 응용에 적용된다.Azure에서 제공하는 신호기 서비스를 사용하면 이 모든 기술을 얻을 수 있으며 밑바닥 인프라를 관리할 필요가 없습니다.
![](https://s1.md5.ltd/image/7720e3b7cdeee8334b800c4feda1db44.png)
image was originally copied from here
Azure의 신호기 서비스는 ASP용 SDK를 포함한 광범위한 언어 지원을 제공합니다.NET 코어, ASP.NET C# 및 JavaScriptAzure 기능이 있는 서버 없이 신호기 서비스에 연결하고 메시지 협상을 처리할 수도 있습니다.
신호기는 메시지가 집선기에 전송될 때 일반적으로 메시지를 전달할 수도 있고 특정한 클라이언트에게 직접 메시지를 보낼 수도 있다.
신호기 기술에 대한 정보를 더 알고 싶으시면 Microsoft page on it here 를 보십시오.
그것은 어떻게 각도와
따라서 신호기가 있으면 네트워크 클라이언트를 연결해서 메시지를 보내고 받을 수 있습니다.@aspnet/signalr 패키지와 맞춤형 서비스를 사용하면 실제로 설정하기 쉽다.
기본 설정은 다음과 같습니다.
![](https://s1.md5.ltd/image/674229f915ad28b9394308f289f1f58f.png)
왼쪽에서 연결 프로세스를 볼 수 있습니다.
오른쪽에서 클라이언트 연결 후의 종료 상태를 볼 수 있습니다.신호기 서비스에 보내는 메시지는 집선기 모드로 클라이언트에게 전파됩니다.특정 클라이언트 간에만 메시지를 전달하도록 설정할 수도 있습니다.이 예시와 제가 소개할 내용에서 저는 이 집선기를 통해 모든 메시지가 신호기 서비스에 연결된 모든 클라이언트에게 전송되도록 집선기를 설치했습니다.
같은 설정은 Angular 이외의 다른 프레임에 사용할 수 있습니다.관건은 @aspnet/signalr 패키지를 사용하고 악수를 실제 신호 서비스와 조화롭게 하는 것이다.
Azure에서 설정
따라서 Angular에서 신호기 서비스를 사용하려면 우선 Azure에 인프라 시설을 설치해야 한다.그 중 가장 좋은 점은 마이크로소프트가 Azure 포털을 통해 이 모든 것을 매우 직관적으로 만들었다는 것이다.
우선 신호기 서비스만 만들면 됩니다.
![](https://s1.md5.ltd/image/fd51742b9afbe625a74dbc1135fdccb6.png)
그런 다음 키를 돌려 Azure가 처음 악수할 때 사용하는 연결 문자열을 캡처합니다.
![](https://s1.md5.ltd/image/d9793c8318556afb75990b01764a269a.png)
다음 두 개의 Azure 함수를 생성합니다.
negotiate
초기 악수 프로세스 처리messages
악수가 좋을 때 메시지 전송negotiate
.![](https://s1.md5.ltd/image/1b9a3c095f34ca8f94f91c484edb26f2.png)
그리고
messages
이렇게 보입니다.![](https://s1.md5.ltd/image/fc61f24d59e71a65b636c4c70a2b6753.png)
응용 프로그램 설정으로 Azure Functions 응용 프로그램 인스턴스
AzureSignalRConnectionString
를 추가해야 합니다.![](https://s1.md5.ltd/image/bc91d9d88f7ceda1e49ddd95b062e4b7.png)
인프라에 대한 마지막 단계는 URL 등을 사용하여 테스트를 진행 중인 경우 CORS만 활성화하는 것입니다. 서비스의 CORS 설정을 사용하여 이를 수행할 수 있습니다.
나는 또한 Azure Functions VSCode extension를 사용하여 Azure 기능을 개발하는 것을 강력히 건의한다.그것은 매우 사용하기 쉬워서 몇 걸음이면 구축하고 배치할 수 있다.
건축 각도
일단 인프라 시설 설정이 생기면, 각도 프로그램을 연결할 때가 되었다.
만약 네가 나의 sample application GitHub repo을 본다면, 너는 이 점의 행동을 보게 될 것이다.
다음 두 가지 방법으로 패키지@aspnet/signalr를 포장하는 서비스를 만들었습니다.
export class SignalRService {
private readonly _http: HttpClient;
// private readonly _baseUrl: string = "http://localhost:7071/api/";
private readonly _baseUrl: string = environment.azureConnection;
private hubConnection: HubConnection;
messages: Subject<string> = new Subject();
constructor(http: HttpClient) {
this._http = http;
}
private getConnectionInfo(): Observable<SignalRConnectionInfo> {
let requestUrl = `${this._baseUrl}negotiate`;
return this._http.get<SignalRConnectionInfo>(requestUrl);
}
init() {
this.getConnectionInfo().subscribe((info) => {
let options = {
accessTokenFactory: () => info.accessToken,
};
this.hubConnection = new signalR.HubConnectionBuilder()
.withUrl(info.url, options)
.configureLogging(signalR.LogLevel.Information)
.build();
this.hubConnection.start().catch((err) => console.error(err.toString()));
this.hubConnection.on("notify", (data: any) => {
this.messages.next(data);
});
});
}
서비스가 초기화될 때, 신호기 단점에 대한 인용을 얻고, 이 단점은 신호기 서비스에서 공개되며, 악수를 협상합니다.그리고 각도 주체를 이용하여 신호기에서 "notify"이벤트에서 받은 새로운 메시지를 보냅니다.실제 메시지에 관해서 저는 localStorage를 사용하여 대화 기록을 처리하기로 했습니다. 여기에서 보신 바와 같이:
send(message: string): Observable<void> {
console.log("called2");
let requestUrl = `${this._baseUrl}messages`;
return this._http.post(requestUrl, message).pipe(map((result: any) => {}));
}
receieve(message: Message): Message[] {
// read in from local strorage
const messages = this.load();
messages.unshift(message);
localStorage.setItem("messages", JSON.stringify(messages));
return messages;
}
load(): Message[] {
const messagesLocal = localStorage.getItem("messages");
let messagesResponse = [];
if (messagesLocal !== null) {
messagesResponse = JSON.parse(messagesLocal);
}
return messagesResponse;
}
clear(): Observable<void> {
const messagesLocal = localStorage.getItem("messages");
let messagesResponse = [];
if (messagesLocal !== null) {
localStorage.setItem("messages", JSON.stringify(messagesResponse));
}
return of(null);
}
Angular 응용 프로그램에서 채팅 기능을 조작하는 실제 구성 요소에서 신호기 서비스에 대한 참조를 만들고 흐름에서 오는 이벤트를 처리합니다. this.signalRService.messages.subscribe((message) => {
// create message
const result = message.split("|");
const sendMessage = new Message();
sendMessage.sender = result[0];
sendMessage.body = result[1];
// this.messages.unshift(sendMessage);
this.store.dispatch(
MessagesActions.messageRecieved({ message: sendMessage })
);
});
응용 프로그램의 각종 흐름을 처리하기 위해 NgRx 을 사용합니다. 여기에서 messageReceived
동작의 스케줄링을 볼 수 있습니다.생각을 끝내다
그래서 이 글에서 저는 Azure의 신호기 서비스를 어떻게 Angular에 사용하는지 소개했습니다.이것은 기능이 강한 서비스로 전방 응용 프로그램과 쉽게 통합할 수 있습니다.
이 기술을 사용하면 매우 좋은 것을 세울 수 있다.내가 프로필에서 언급한 바와 같이 이것은 실시간 피드백을 필요로 하는 모든 응용 프로그램에 매우 좋다.
나는 여기에서 Angular를 소개했지만, 몇몇 유사한 모델은 다른 주요 전단 라이브러리에 응용할 수 있다.자세한 내용은 내 sample application 를 참조하십시오.
내 댓글을 읽어줘서 고마워!andrewevans.dev로 연락 주세요. 질문이 있거나 더 알고 싶으면 언제든지 트위터에 메시지를 보내주세요.
Reference
이 문제에 관하여(icrosoft Signal을 Angular에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andrewevans0102/connecting-microsoft-signalr-with-angular-147g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)