Net.Sockets, WCF или ASP.NET для чата в реальном времени
Я хочу реализовать свою идею, разработать приложение, которое будет иметь клиент-серверную сторону и устанавливать соединение клиентов с сервером, чтобы они могли передавать сообщения в режиме реального времени.
Поэтому я буду разрабатывать с использованием C#, но вопрос в том, что я должен использовать? Я не знаю, какой метод будет лучше для этого чата. Мне нужно выбирать между Net.Sockets, WCF и ASP.NET. Поэтому я прошу вас помочь мне с выбором. Если я использую ASP.NET, мне придётся поиграть с вещами с собственным хостом, потому что я не хочу создавать сайт или что-то подобное для использования чата.
2 ответа
Во-первых, давайте начнем с ваших вариантов
Net.Sockets слишком низкого уровня. Трудно сделать приемлемый протокол. Но вы можете использовать существующий протокол - WebSockets. Существует руководство по написанию сервера websocket на C#: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_server
Возможно, если вы выберете WCF, вы можете попытаться использовать постоянное дуплексное соединение WCF через netTcpBinding. Это легко сделать самостоятельно принимающий WCF-сервис. Но WCF сложен, и я думаю, что это накладные расходы для простых задач. Кроме того, как я знаю, дуплексное соединение работает с использованием длинного опроса, который тратит много ресурсов. Тщательно выбирайте этот вариант.
ASP.NET. Если вы говорите о MVC или Web Api, вы должны использовать длинный опрос, который тратит много ресурсов и не в реальном времени
Есть еще один вариант - ASP.NET SignalR (который работает с использованием WebSockets)
- Здесь вы можете посмотреть, как написать клиент: https://github.com/SignalR/SignalR/wiki/SignalR-Client
- И здесь вы можете найти учебник по самостоятельному хостингу SignalR: http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host
Как уже упоминалось в @nsinreal, SignalR, вероятно, лучший путь для этого.
В сети множество примеров - вот вам пример:
http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr
Это для приложения чата, не меньше:)