SignalR에서 특정 클라이언트 호출
서버에서 특정 클라이언트를 호출하고 모두에게 브로드 캐스트하지 않으려 고합니다. 문제는 내가 Hub 또는 PersistentConnection이 아닌 일부 AJAX 요청 (.aspx 코드 숨김)의 범위에 있으므로 Clients 속성이 없으며 해당 ajax (jquery) 호출을 만든 클라이언트가 클라이언트가 아니라는 것입니다. 시그널 러 메시지를 보내고 싶어요!
이제 새 클라이언트를 서버 정적 목록에 등록하는 JS 페이지로드시 호출되는 허브가 하나 있으므로 클라이언트 Guid가 있습니다. 그러나 그것을 사용하여 서버에서 특정 클라이언트로 메시지를 보내는 방법을 모릅니다.
최신 문서를 참조하십시오.
영구 연결-https: //github.com/SignalR/SignalR/wiki/PersistentConnection
허브-http: //www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val(), $.connection.hub.id);
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
서버 측에서 클라이언트의 ID와 해당 ID에 대한 응답을 보냅니다.
public void Send ( string name , string message , string connID )
{
Clients.Client(connID).broadcastMessage(name , message);
}
허브 서버에 요청을 보낼 때마다 요청에 다른 연결 ID가 있으므로 계속 변경되지 않는 사용자 이름이 포함 된 정적 해시 테이블과 신호 r에 대한 연결 ID를 매번 추가했습니다. 연결하면 연결 ID가 업데이트됩니다.
$.connection.hub.start().done(function () {
chat.server.registerConId($('#displayname').val());
});
그리고 서버 코드에서 :
public class ChatHub : Hub
{
private static Hashtable htUsers_ConIds = new Hashtable(20);
public void registerConId(string userID)
{
if(htUsers_ConIds.ContainsKey(userID))
htUsers_ConIds[userID] = Context.ConnectionId;
else
htUsers_ConIds.Add(userID, Context.ConnectionId);
}
}
특정 ID로 메시지를 보내고 싶을 때
Clients.Client(Context.ConnectionId).onMessage(
new Message{From = e.Message.From, Body = e.Message.Body}
);
특정 사용자가 실제로 호출자 인 경우 다음을 사용할 수 있습니다.
Clients.Caller.myJavaScriptClientFunction();
참고 URL : https://stackoverflow.com/questions/7872589/call-specific-client-from-signalr
'developer tip' 카테고리의 다른 글
4가 Number의 인스턴스가 아닌 이유는 무엇입니까? (0) | 2020.11.25 |
---|---|
생성자는 Liskov 대체 원칙을 준수해야합니까? (0) | 2020.11.25 |
Internet Explorer (9)가 UserAgent에서 "Mozilla"를보고하는 이유는 무엇입니까? (0) | 2020.11.25 |
키워드 "new"는 C #의 구조체에 어떤 역할을합니까? (0) | 2020.11.25 |
jQuery .text () 메서드는 XSS 안전합니까? (0) | 2020.11.25 |