2012-10-26 1 views
5

TleDwukierunkowa komunikacja z obiektami po stronie serwera dla rozwoju web-aplikacji

Moja przeszłość jest przedmiotem dużej skali Oriented Middleware i rozwój aplikacji dla urządzeń wbudowanych i komputerów stacjonarnych z C++. Teraz musimy stworzyć aplikację internetową o wysokiej skali dla naszego startupu.


Pytanie

żądanie-odpowiedź oparty i ciągłego odpytywania w oparciu obecne ramy web-development wygląda bardzo prymitywne, nieskuteczne.

Szukam całkowicie zorientowanego na obiekt programowania obiektowego i programowania opartego na zdarzeniach. Oto przykład to,

Jest trwały obiekt o nazwie employeeManager na serwerze,

metody tego obiektu,

empList getAllEmployeeList(); 
empList getEmployeeOfDepartment(string strDept); 
/*Some more */ 

zdarzenia tego obiektu

employeeAdded(empID); 
employeeEdited(empID); 
employeeRemoved(empID); 
/*Some more */ 

Teraz javascript po stronie klienta powinien móc wywoływać metody tego obiektu (po stronie serwera) i powinien być w stanie odbierać zdarzenia tego obiektu. Możemy uzyskać wyniki wywołania metody w trybie asynchronicznym. Struktura powinna również zapewniać sposób, w jaki widok (lub strona html-js) może rejestrować wymagane zdarzenia po stronie serwera.

Czy istnieją ramy, które działają na tej metodologii. Coś takiego na górze gniazdaIO? Wszelkie ramy, które zapewnia dobre dwukierunkowe RPC między javascript klienta i zerować obiekty boczne?

+0

To może być łatwiejsza odpowiedź, jeśli powiesz, z jakim stosem serwerów pracujesz - na przykład https://github.com/SignalR/SignalR pomaga przekazywać zdarzenia po stronie serwera do klientów JS (między innymi) w. Stos na bazie NET. – JcFx

+0

@JcFx, Bardzo dziękuję za odpowiedź. Nie .net, poproszę o Javę lub JavaScript dla programowania serwera. – SunnyShah

+0

Połowa zabawy buduje tę część systemu od zera - a może to po prostu ja :) Obawiam się, że nie znam żadnych gotowych systemów do zrobienia tego, o co prosisz, ale obserwuję, aby zobaczyć, co ludzie wysuwali - to dobre pytanie. +1 do Xyu za stwierdzenie, co bym zaczął. – Pebbl

Odpowiedz

2

Spróbuj wykonać następujące czynności: combo

pinowe + socket.io + Backbone.Model + trochę wyobraźni.

Myślę, że brakujący element to struktura podobna do modelu, która może być używana zarówno po stronie serwera, jak i po stronie klienta. Model musi synchronizować stan między serwerem a klientem.

Oto artykuł, który uważam za bardzo interesujący, a może możesz użyć opisanej techniki?

Artykuł:

http://blog.andyet.com/2011/feb/15/re-using-backbonejs-models-on-the-server-with-node/

2

NodeJS i sockets.io. Mogą one pomóc osiągnąć pożądany efekt.

+0

Tak, ale problem polega na tym, że skończymy z pisaniem dla niego odpowiedniej ilości danych. Czy zapewnia sposób na utworzenie kodu pośredniczącego w javascript po stronie klienta, który wewnętrznie obsługuje całą komunikację obiektu po stronie serwera? – SunnyShah

+0

Być może zdefiniowanie funkcjonalności dla każdego typu obiektu po stronie serwera w klasie js może zrobić coś podobnego, ale globalna procedura obsługi dla wszystkich typów - nie wiem. Zależy od potrzebnej funkcjonalności – undefined

2

Meteor jest oparty ramy node.js który wykorzystuje sock.js komunikacji websocket i MongoDB do bazy danych, która jest zorientowana na poziomie skalowalnych aplikacji. Meteor wykona dla ciebie wszystkie ciężkie operacje, jeśli chodzi o synchronizację klient-serwer - nie będziesz musiał pisać żadnego kodu do synchronizacji bazy danych. Rezultatem jest minimalny kod bazujący głównie na logice aplikacji zamiast na req/resp.Przykłady można znaleźć tutaj: http://meteor.com/examples/leaderboard

1

Jeśli znasz język C++, możesz wypróbować numer G-WAN. Mają świetny przykład, używając Komety (czego szukasz), a także są tam opakowania Node.JS.

G-WAN umożliwia również pisanie apletów po stronie klienta w dowolnym języku. Dla ciebie, C++, może być właśnie to, czego szukasz.

To bardzo skalowalny serwer aplikacji WWW. Z wszystkich benchmarków, jakie widziałem, Node.JS nie skaluje się dobrze z wysoką współbieżnością (może się mylę, jeśli tak, proszę dać mi znać i podać mi informacje). Mówiąc to, robiłem rzeczy bardzo podobnie do tego, o czym mówisz. Jedyne, co musiałem zrobić, to napisać bardzo proste opakowanie do przetłumaczenia z JS na dowolny język, którego używałem w tym czasie (dla mnie zrobiłem to z PHP, MivaScript, SMT i C).

Ale kluczem (dla mnie) było używanie Komety, aby ograniczyć zbędne odpytywanie serwera.

1

Jeśli chcesz używać RPC w wielu językach, może Ci się przydać Apache Thrift. Uważam, że istnieje klient JavaScript (ale nigdy go nie użyłem). Można zbudować strukturę RPC na szczycie Socket.IO, jak wielu innych wskazało, ale wydaje się, jak malowanie kota wygląda jak krowa ... ie zabawne, ale nieszczególnie produktywne

Jestem pewien, że już, lub masz pewne ograniczenia ze strony dziedzictwa, ale na wypadek, gdybyś nie zrobił, zastanawiałbym się nad tym, czy RPC jest naprawdę modelem, którego chcesz użyć. Usługa RPC w sposób pobieżny upraszcza istnienie opóźnień sieci i jako taka powoduje kilka chwiejnych założeń w fundamentach aplikacji. Istnieje ogólnie dość krótki i czytelny numer critique of RPC (przez nie mniej niż AST), który może być wart przeczytania.