Implementasi komet untuk ASP.NET? [Tutup]


103

Saya telah mencari cara untuk mengimplementasikan perpesanan seperti gmail di dalam browser, dan sampai pada konsep Comet . Namun, saya belum dapat menemukan implementasi .NET yang bagus yang memungkinkan saya melakukan ini dalam IIS (aplikasi kami ditulis dalam ASP.NET 2.0).

Solusi yang saya temukan (atau bisa dipikirkan, dalam hal ini) memerlukan meninggalkan utas yang sedang berjalan per pengguna - sehingga dapat mengembalikan respons kepadanya begitu dia mendapat pesan. Ini tidak berskala sama sekali, tentu saja.

Jadi pertanyaan saya adalah - apakah Anda mengetahui implementasi ASP.NET untuk Comet yang bekerja dengan cara yang berbeda? Apakah itu mungkin dengan IIS?


12
Saya kira implementasi awal yang diberkati MS adalah SignalR: hanselman.com/blog/…
pengguna423430

Node.JS sekarang didukung di Azure, segera IIS pada tahun 2003 akan didukung. Itu berarti kita akan dapat menjalankan server komet dalam IIS ( windowsazure.com/en-us/develop/nodejs )
goodguys_activate

Jawaban:


44

Komet sulit untuk diukur dengan IIS karena konektivitas komet yang terus-menerus, tetapi ada tim yang melihat skenario Komet sekarang. Juga lihat blog Aaron Lerch karena saya yakin dia telah melakukan beberapa pekerjaan Comet awal di ASP.NET.


9
Ini sebenarnya diterapkan; lihat WebSync, sesuai tanggapan Anton di bawah. ( frozenmountain.com/websync )
jvenema

3
Apakah ada yang menyebut reverse ajax? lihat ini: pokein.codeplex.com
Zuuum

4
MVC Async Controllers dapat membantu mengatasi masalah IIS dengan melepaskan thread pekerja non IIS yang menunggu, lihat posting hebat ini oleh Clay Lenhart . Lihat juga Proyek Contoh Server Obrolan di BitBucket.
Jacob

33

WebSync adalah server Comet terukur yang memenuhi standar yang terintegrasi langsung ke dalam pipeline IIS / .NET. Ini juga tersedia sesuai permintaan sebagai layanan yang dihosting.

Ini secara resmi mendukung hingga 20.000 koneksi klien bersamaan per node server, tetapi pengujian individu telah melihatnya mencapai 50.000. Throughput pesan optimal di sekitar 1.000-5.000 tanda klien bersamaan, dengan pesan yang dikirim setinggi 300.000 per detik dari satu node.

Ini mencakup dukungan sisi klien untuk JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime, dan .NET Compact, dengan dukungan sisi server untuk .NET / Mono dan PHP.

Pengelompokan didukung menggunakan SQL Server atau Azure Caching di luar kotak, tetapi penyedia kustom dapat dibuat untuk apa saja (Redis, NCache).

Penafian: Saya bekerja untuk perusahaan yang mengembangkan produk ini.


17
harus ada penafian di sini, sebagai produk Anda ...
Sam Saffron

9
Tentu, ini diproduksi oleh perusahaan tempat saya bekerja :) Jelas tidak berusaha menyembunyikan apa pun.
Anton

1
@ Anton - tidak menyembunyikan sesuatu tidak sama dengan mengungkapkannya.
RedFilter

1
@ Anton Dapatkah Anda menjelaskan lebih lanjut tentang bagaimana hal itu mendukung hingga 20k koneksi klien bersamaan per node server? Angka-angka ini terlihat, yah .. "terlalu besar".
Pacerier

1
Saya kira tidak bijaksana untuk bertanya bagaimana websync bekerja di bawah tenda, secara konseptual - tentu saja dari pemandangan 25.000 kaki.
nocarrier

15

Baru-baru ini saya menulis contoh sederhana dari Server Obrolan Polling Panjang menggunakan MVC 3 Async Controllers berdasarkan file artikel hebat oleh Clay Lenhart

Anda bisa menggunakan contoh pada penerapan AppHarbor yang saya siapkan berdasarkan sumber dari proyek BitBucket.

Juga, lebih banyak informasi tersedia dari posting blog saya yang menjelaskan proyek tersebut .


saya suka contoh penerapan
AppHarbor

'posting blog menjelaskan proyek' -> web.archive.org/web/20130328042214/http://…
jaybro

Terima kasih! Senang Anda menyukai artikel ini.
Clay Lenhart

4

Sebenarnya ada banyak pilihan untuk membuat website yang didukung ajax dengan ASP.NET tapi jujur ​​saja, PokeIn adalah cara termudah untuk membuat aplikasi web yang didukung ajax komet. Ini telah menyelamatkan salah satu proyek perusahaan saya.



1

Saya pernah menggunakan situs obrolan dahulu kala yang menggunakan server streaming http yang dibuat khusus. Saya benar-benar mereproduksi perangkat lunak itu pada satu titik karena rasa ingin tahu, dan menurut saya cukup mudah untuk melakukannya. Saya tidak akan pernah mencoba menerapkan jenis serupa "permintaan tak terbatas" di IIS, terutama di ASP.NET, karena permintaan mengikat utas kumpulan utas (atau utas IO, jika penangan asinkron digunakan) tanpa batas, yang berarti Anda hanya dapat menangani begitu banyak per server karena konfigurasi kumpulan utas Anda memungkinkan.

Jika saya memiliki kebutuhan sah yang kuat untuk fungsi seperti itu, sejujurnya saya akan menulis server http khusus untuk itu.

Saya tahu itu tidak benar-benar menjawab pertanyaan Anda, tetapi saya pikir masukannya mungkin relevan.


1

Grup WS-I menerbitkan sesuatu yang disebut "Profil Aman yang Andal" yang memiliki implementasi Glass Fish dan .NET yang tampaknya saling beroperasi dengan baik.

Semoga saja ada implementasi Javascript di luar sana juga.

Ada juga implementasi Silverlight yang menggunakan HTTP Duplex. Anda dapat menghubungkan javascript ke objek Silverlight untuk mendapatkan callback saat terjadi push.

Ada juga versi berbayar komersial juga.


4
Posting massal dengan jawaban yang persis sama atas sejumlah pertanyaan secara berurutan cenderung menimbulkan beberapa tanda ...
Marc Gravell

2
( psst )

0

Saya pikir pendekatan Comet tidak benar-benar dapat diskalakan kecuali Anda siap untuk memperluas pertanian web secara horizontal (dengan menambahkan lebih banyak server web ke dalam campuran). Cara kerjanya adalah membiarkan koneksi TCP terbuka per sesi pengguna, hanya agar server dapat mendorong hal-hal ke koneksi itu dari waktu ke waktu untuk segera memberi tahu pengguna tentang perubahan atau aktivitas.


6
Semuanya hanya dapat diskalakan secara vertikal ke suatu titik, setelah itu penskalaan horizontal harus dilakukan.
Anton
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.