我正在使用signalR推送服务。
我创建了一个局部视图。内部局部视图。这是我的客户端代码:
<script type="text/javascript">
var objHub;
$(function () {
objHub = $.connection.AnilHub;
loadClientMethods(objHub);
$.connection.hub.start()
.done(function () { objHub.server.connect();
console.log('Now connected, connection ID=' + $.connection.hub.id); }
// at the same time i want to insert into database to set user is online.
objHub.server.login('user1');
)
.fail(function () { console.log('Could not Connect!'); });
function loadClientMethods(objHub) {
objHub.client.getMessages = function (message) {
$('#divMessage').append('<div><p>' + message + '</p></div>');
var height = $('#divMessage')[0].scrollHeight;
$('#divMessage').scrollTop(height);
}
}
</script>
中心代码
[HubName("MyHub")]
public class MainHub : Hub
{
public void Connect()
{
try
{
string userGroup = "test";
var id = Context.ConnectionId;
Groups.Add(id, userGroup);
Clients.Caller.onConnected(id, userGroup);
}
catch
{
Clients.Caller.NoExistAdmin();
}
}
public void NotifyAllClients(string Message)
{
Clients.Group("test").getMessages(Message);
}
public override Task OnConnected()
{
// Set status online on database
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled = false)
{
// set status disconnct in database
return base.OnDisconnected(stopCalled);
}
}
}
现在我只想避免重新加载登录检查。因为每次刷新页面时,它都会调用connect方法并调用hub方法。如何避免重新连接问题。我如何坚持这些东西,甚至枢纽也不会处理会议。
请建议......
答案 0 :(得分:0)
在你的html中,在第一次加载时,创建一个随机id并将其存储在cookie中。
在您的集线器代码中,创建一个arraylist并使用相应的连接ID存储这些随机ID。
在你的html中,尝试在每次刷新页面时读取cookie中的随机ID,如果找不到它,则为新连接,如果找到,则使用带有新连接ID的旧随机ID连接到您的集线器。然后在您的hub arraylist中,对于此特定随机ID,请使用新连接ID替换旧连接ID。