JQuery (MVC) көмегімен файлдық жүйенің мәтіндік файлын синхронды түрде ағынмен тасымалдау

Тұрақты түрде жаңартылып жатқан (шамамен 5 секунд) серверімдегі мәтіндік файл бар. Менің веб-бетімде div-тың бұл файлды MVC ішіндегі jQuery арқылы көрсетуін қалаймын.

Менде жұмыс істейтін jQuery таймер бар, бірақ файл көрсетілмейді. Менің жоспарым әр секундтан кейін ControlCare Action жүктеу үшін jQuery-ті алу болды және бұл әрекет FilePathResult-ды қайтарады.

Сценарий:

$(function() {
        var streamer = $("div.wrapper div.streamer");
        //===

        var active = false;
        $(document).ready(function() {

            $(".uncontrolled-interval p", streamer).everyTime(1000, function() {
                $(this).load("/Home/Stream");
            });
        });
    });

Көрініс:

<div class="wrapper">
    <div class="streamer">
        <div  id="uncontrolled-interval" style=" height:420px; width:1200px; background-color:Black; color:White;  overflow: auto; " ></div>
    </div>
</div>

Контроллер:

 Public Function Stream() As ActionResult
    Return File(ConfigurationManager.AppSettings.Item("LiveStreamPath"), "text/plain")
End Function

LiveStreamPath contains the path to the text file. I was thinking of creating a StreamReader in the Action instead. What sorts of implementations can I use to get this file to stream?

0

2 жауаптар

Мен мұны jquery-тің шағын сынақ қосымшасы үшін жасадым (фонды тестілеу, алдын-ала жұмыс істеуді әдемі түрде жасамай-ақ, бұл процесті бастау үшін 1 сұраныс жіберіп, мониторды өшіретін сілтемені басу арқылы шақырылады.

function startJob() {
    $.get('<%=ResolveUrl("~/Background/StartJob.ashx") %>');
    setTimeout('updateStatus()', 500);
}
function updateStatus() {
    $("#results").load('<%=ResolveUrl("~/Background/ReadStatus.ashx") %>');
    setTimeout('updateStatus()', 500);
}

Фондық режимде File.ReadAllText()

Жазу үшін

File.AppendText() / AppendBytes() және т.б., ол оған файлды оқу құлпына қоюсыз қосады. Мен тек streamwriter мен барлық FileShare параметрлерін пайдаланғаным сирек ғана, бұл веб-бағдарлама үшін жеткілікті.

Ия, үнемі жаңартылып жатсаңыз және үлкен көлемдегі деректермен келіспесеңіз. Егер бұл проблема болмаса (мысалы, ауыр өңдеу болмаса, ui көп нәрсе емес), содан кейін оны қалдырыңыз. Егер UI қамқорлық жасаса, онда ReaderWriterLockSlim пайдаланыңыз.

Оқу үшін көптеген ағындарды немесе жазбаларға арнайы кіру рұқсатын беретін ресурсқа қатынауды басқару үшін пайдаланылатын құлыпты білдіреді.

0
қосылды

2 тәсілдеме бар: СҰРАУ және ПУШ.

Сіз қабылдаған клиент AJAX сұрауларын жіберіп, мазмұн өзгермеген болса да, нәтижелерді көрсете отырып, жүйелі түрде сервермен сауалнама жүргізеді. Бұл сценарийде ортақ ресурс бар. Бұл ортақ ресурс файл болып табылады. Бұл ресурсты бір мезгілде әртүрлі ағындар/процестер арқылы алуға болады. Файлдарға қатысты проблема мынада, бір жіп файлға жазғанда (сіз файлды әр 5 секунд сайын жаңартасыз деп айттыңыз), егер басқа ағымнан оқуға тырысса, ол файлдан сәйкессіз деректерді алып тастайды . Сондықтан егер сіз дауыс беру әдісімен жүруді шешсеңіз, осы файлға дұрыс кіруді синхрондауды қамтамасыз етуіңіз керек. Файлға немесе басқа үрдіске жазылатын тағы бір жіп бар ма, оған жету үшін әртүрлі әдістер болуы мүмкін. Мысалы, егер басқа ағын болса, сіз Monitor.Enter ( C# lock ). Ортақ ресурстарды синхрондау үшін, Mutex .

Екінші тәсіл - бұл PUSH тәсілі. Бұл үлгіде файл жаңартылған кезде клиенттерге хабарландыру жіберетін сервер болып табылады. Бұл клиенттер оңтайландырылғандықтан, клиенттер AJAX сұрауларымен көптеген серверлермен айналыспайды. Мұны іске асыру үшін әр түрлі әдістер бар. Мысалы, HTML5 бағдарламасында WebSockets қолдануға болады. Microsoft бұл сценарийді өте жеңіл жолмен беретін Signalr деп аталатын үлкен платформада жұмыс істейді.

0
қосылды