В качестве примера будем писать примитивный чат с мгновенным уведомлением всех клиентов с помощъю библиотеки SignalR
Для этого в Visual Studio создадим пустой проект ASP.NET Empty Web Application
Сама библиотека SignalR добавляется в одну строку через NuGet:
это добавит в проект скрипты jQuery и SignalR а также reference-ссылку на dll SignalR и другие dll необходимые для её работы.
Добавляем произвольный класс — я назову его Chat, он должен наследовать из класса Hub, определенного в SignalR.Hubs
в нашем классе можно определять любое количество любых публичных методов, с любыми параметрами — все они бутуд доступны из соответствующего JavaScript proxy класса на клиенте.
в нашем случае определяем простетький Send, и для удобства патаметр будет dynamic.
Clients определен в родительском классе, является динамическим объектом — вызов любого произвольного метода на нем — вызывает его на всех подключенных клиентах с теми же параметрами.
добавляем в проект html документ — chat.html, с простенькой разметкой
добавляем ссылки на необходимые JS скрипты, при этом /signalr/hubs должен быть добавлен после signalr.js, так ка зависит от него.
далее собственно сам клиенский скрипт:
в качестве имени каждого клиента я использовал версию браузера.
все клиенты получают push-style уведомления одновременно, как видно на видео:
получить примеры использования SignalR можно набрав
скачать исходники рассмотренного в статье и в видео примера — здесь
с Новым 2012 Годом!
подготовка
Для этого в Visual Studio создадим пустой проект ASP.NET Empty Web Application
Сама библиотека SignalR добавляется в одну строку через NuGet:
Install-Package SignalR
это добавит в проект скрипты jQuery и SignalR а также reference-ссылку на dll SignalR и другие dll необходимые для её работы.
пишем серверный код
Добавляем произвольный класс — я назову его Chat, он должен наследовать из класса Hub, определенного в SignalR.Hubs
public class Chat : Hub
{
public void Send(dynamic message)
{
Clients.AddChatMessage(message);
}
}
в нашем классе можно определять любое количество любых публичных методов, с любыми параметрами — все они бутуд доступны из соответствующего JavaScript proxy класса на клиенте.
в нашем случае определяем простетький Send, и для удобства патаметр будет dynamic.
Clients определен в родительском классе, является динамическим объектом — вызов любого произвольного метода на нем — вызывает его на всех подключенных клиентах с теми же параметрами.
пишем клиентский код
добавляем в проект html документ — chat.html, с простенькой разметкой
<input type="text" id="msg" />
<input type="button" id="broadcast" value="broadcast" />
<ul id="messages">
</ul>
добавляем ссылки на необходимые JS скрипты, при этом /signalr/hubs должен быть добавлен после signalr.js, так ка зависит от него.
<script src="http://code.jquery.com/jquery-1.7.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.signalR.min.js" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
далее собственно сам клиенский скрипт:
<script type="text/javascript">
$(function () {
//получаем прокси объект чат
var chat = $.connection.chat;
//определяем метод, вызываемый с серверной част,
//параметры естественно должы совпадать
chat.AddChatMessage = function (msg) {
$("#messages").append("<li>" + msg.name + " : " + msg.text + "</li>");
};
//обработчик клика - вызывает метод прокси объекта определенного на сервере
$("#broadcast").click(function () {
var msg = {
'name': $.browser.version,
'text': $('#msg').val()
};
chat.send(msg);
});
//стартуем все хабы
$.connection.hub.start();
});
</script>
в качестве имени каждого клиента я использовал версию браузера.
в результате
все клиенты получают push-style уведомления одновременно, как видно на видео:
вместо заключения
получить примеры использования SignalR можно набрав
Install-Package SignalR.Sample
скачать исходники рассмотренного в статье и в видео примера — здесь
с Новым 2012 Годом!