SignalR 是否有任何功能来处理 user1 正在向 user2 输入 user1 当前正在输入的警报?我看到的例子都在 ajax 或 jquery 中。这是用于使用 SignalR 的用户之间的聊天
问问题
3451 次
3 回答
2
我们在文本字段的焦点和模糊事件上执行此操作。我们在集线器上调用一个函数,该函数向所有客户端广播一条关于用户的简单消息,例如 typing=true 并将 id 设置为上下文中的连接 id。然后在客户端中,这会用下划线或不同颜色突出显示用户,以查看用户正忙于输入内容。在我们的应用程序中,多个用户可以输入,但您了解这个概念。
你基本上需要三样东西
- 当有人开始打字时更新服务器的客户端方法。这类似于 wiki 示例中的 send 方法
- 然后服务器向所有或选定的正在写作或已开始打字的客户广播。您甚至可以将密钥代码发送到其他客户端上的 mimimc
- 处理关于谁在写的广播的客户端方法
我们将它用于焦点并提高标志,因此我们不会向服务器发送太多请求,但您可以通过各种方式对其进行优化。
于 2012-12-26T19:05:30.367 回答
1
这不是内置功能,但可以通过 SignalR 轻松完成。这是在 JabbR ( http://jabbr.net/ , https://github.com/davidfowl/JabbR ) 中完成的。
这个想法是通过 JavaScript 处理文本 onchange 事件,然后联系服务器以通知另一个客户端有人正在输入。
于 2012-12-25T23:33:15.873 回答
1
使用我的代码
在集线器
public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
Clients.All.addNewMessageToPage(name, message);
}
public void IsTyping(string html)
{
// do stuff with the html
SayWhoIsTyping(html); //call the function to send the html to the other clients
}
public void SayWhoIsTyping(string html)
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.sayWhoIsTyping(html);
}
}
在cshtml中
@{
Layout = null;
}
<h2>Chat</h2>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion"></ul>
<div id="Status"></div>
</div>
<script src="@Url.Content("~/Scripts/jquery-1.10.2.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.signalR-2.2.0.min.js")"></script>
<script src="~/signalr/hubs"></script>
<script>
$(function () {
var chat = $.connection.chatHub;
chat.client.addNewMessageToPage = function (name, message) {
$('#discussion').append('<li><strong>' + htmlEncode(name)
+ '</strong>: ' + htmlEncode(message) + '</li>');
};
chat.client.SayWhoIsTyping = function (html) {
$('#Status').html('<li>' + htmlEncode(html) + '</li>');
setInterval(function () { $('#Status').html(''); }, 3000);
};
$('#displayname').val(prompt('Enter your name:', ''));
$('#message').focus();
$.connection.hub.start().done(function () {
$('#message').keydown(function () {
var encodedName = $('<div />').text($('#displayname').val() + " is Typing...").html();
chat.server.isTyping(encodedName);
}),
$('#sendmessage').click(function () {
chat.server.send($('#displayname').val(), $('#message').val());
$('#message').val('').focus();
});
});
});
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}
</script>
于 2015-07-10T11:13:34.213 回答