Quale architettura dovrei scegliere per questo progetto?

6

Ho un progetto. Il server che si basa su una scheda PCI del telefono è responsabile delle chiamate telefoniche ricevute dal cliente e quindi reindirizza le chiamate telefoniche agli operatori.

Hodecisodicodificareilserverusandoillinguaggiodiprogrammazionec++eilframeworkqtperchél'interfacciadell'SDKdellaschedaPCIèoriginariamentec/c++epermotividiportabilità.

Ilserverdeveinviareleinformazionidelclienteall'operatorementresquillal'operatoreel'interfacciauidelclientdell'operatoredeveesserebasatasulbrowser.

Orailproblemachiaveècomepotrebbeilservernotificareall'operatorechec'èunatelefonataperlui/lei.

Un'architetturachehoconsideratoècomequesta,

Il client browser dell'operatore utilizza ajax un pool del server Web per verificare se è presente una chiamata al client; il server Web che mette in comune il server del database per verificare se c'è una chiamata; il server desktop (c ++) attende le chiamate telefoniche e imposta le informazioni nel database.

Le altre operazioni come riagganciare dalla telefonata dal client, ritrasferire la telefonata all'altro operatore usano anche questa architettura.

Quindi, esiste un modo diverso dal mettere in comune il server (codice js setInterval('getDail', 1000) ) per decidere se c'è una chiamata all'operatore?

Questa architettura è fattibile o dovrei usare alcune tecniche formidabili che conosco come servizi web, xml-rpc, soap ???

Il Caller center è per 8 ~ 300 operatori e gli operatori non si separano geograficamente. Inoltre, ho capito che abbiamo bisogno di fornire un'interfaccia per il programmatore cliente, quindi questa cosa è il cosiddetto middleware? Poi alcune nuove domande, come potremmo esporre l'interfaccia al cliente, COM?

Grazie in anticipo.

    
posta Jichao 14.04.2012 - 08:45
fonte

4 risposte

1

Questo è fondamentalmente un problema di flusso di lavoro / accodamento.

Le richieste in arrivo devono essere posizionate su una coda.

Ogni operatore dovrebbe richiedere (con attesa) l'elemento successivo in coda.

Quando un operatore ottiene l'oggetto "fa un lavoro utile" come dicono in tutti i migliori esempi di codice.

Quando l'operatore ha finito, lui / lei richiede (con wait) l'elemento successivo in coda.

Hai scelto C ++ per i giusti motivi, quindi dovresti seguire questa scelta. Se Java fosse fattibile, avresti potuto scegliere uno dei vari framework di workflow / accodamento per aiutarti. Nel C ++ potresti finire a scrivere molto di te stesso. Sono disponibili diversi pacchetti di gestione code, ma i gestori del flusso di lavoro sono piuttosto scarsi. Fortunatamente il tuo flusso di lavoro dovrebbe iniziare in modo piuttosto semplice.

    
risposta data 20.04.2012 - 10:34
fonte
0

Non pensi che stai provando ad applicare il reverse engineering qui? Voglio dire, l'architettura dovrebbe essere più simile a questa:

Quando il server riceve la chiamata, dovrebbe cercare un operatore gratuito e passare i dettagli del database di quel cliente (se noto) all'operatore, se non è necessario riprodurre un nastro video o qualcosa del genere. Nel frattempo dovrebbe avere un qualche tipo di timer che controlli l'operatore gratuito o è possibile aggiungere qualche tipo di evento al browser o all'attività di chiamata telefonica dell'operatore, come quando l'operatore riaggancia, l'evento si innesca e comunica al server che è libero, quando riceve la chiamata, viene attivato un altro evento e indica al server che l'operatore è occupato.

Non ho lavorato su grandi progetti di C ++ ma l'ho studiato al college e Uni per un anno.

Spero che sia stato utile in qualche modo!

    
risposta data 14.04.2012 - 10:55
fonte
0

Se non l'hai già fatto, leggi l'architettura di Asterisk, una piattaforma di applicazioni di telefonia open source. Il tuo progetto sembra simile: link

    
risposta data 14.04.2012 - 16:26
fonte
0

Per inviare informazioni al server Web dalla cabina telefonica, raccomanderei un servizio web RESTful. Ciò manterrà entrambi i server liberi la maggior parte del tempo. (Questo è ciò che fa l'azienda twilio) API REST

Forse potresti usare websockets per "spingere" nuove chiamate ai browser dell'operatore. Se si utilizza un browser più vecchio (come IE 8), questa potrebbe non essere la scelta migliore. Altrimenti, dovrai eseguire aggiornamenti periodici con ajax. Questo ridurrà le chiacchiere di verificare continuamente le modifiche, ma manterrà anche molte connessioni aperte. HTML5 WebSockets

    
risposta data 20.04.2012 - 00:04
fonte

Leggi altre domande sui tag