Fwd: Mã nguồn Project 2

7 views
Skip to first unread message

Trong Nguyen

unread,
Jun 18, 2015, 8:44:32 AM6/18/15
to wis...@googlegroups.com, Ân Phạm, Sen K55

Dear Thầy và mọi người
Việc truyền file trong project này có mấy vấn đề.
Tại bản Desktop, trước đây a Nguyên sử dụng thư viện Thrift để generate ra module truyền file, chứ không xây dựng theo dạng api. Tuy nhiên, Thrift không hỗ trợ Silverlight - công nghệ dược sử dụng cho bản webapplication - nên khi phát triển thêm bản WebApplication thì nảy sinh vấn đề về việc lấy các file về từ server.

Để bài bản thì cần phải xây dựng một API cho việc này, tuy nhiên, do thời gian khá gấp, mà nhóm Sen + Ân cũng chưa có nhiều kinh nghiệm nên sợ rằng mở rộng server thời điểm đó không khả thi. Lúc đó em đã đề ra một giải pháp tình thế là sử dụng phương thức html để download trực tiếp file trace về client. Rõ ràng giải pháp này có nhiều hạn chế, nhưng có thể tạm chấp nhận được trong hoàn cảnh cần đảm bảo có thể demo.

NS2 chạy trên linux, vì thế ta có 1 server linux phục vụ mô phỏng, còn WisSim WebApplication thì chạy trên windows server. Trên lý thuyết, 2 server này phải có cơ chế kết nối để truyền file. Tuy nhiên, thực tế cài đặt thì 2 server này đều chạy chung trên 1 server thật. Nên vấn đề truyền file trở nên đơn giản hơn rất nhiều, để có thể lấy file trace từ server chạy NS2, e dự định sử dụng chế độ share thư mục của server, như vậy sẽ có 1 thư mục thực sự trên đĩa cứng, nhưng các server sẽ sử dụng chung.

Trước e có trình bày việc này với Thầy 1 lần, nhưng lúc đó trao đổi nhanh, không ghi lại, nên chắc lâu ngày cũng quên mất. Việc setup 1 server windows cho bạn Sen e chưa kịp làm thì bị gián đoạn vì vụ tại nạn, cũng may mà Sen có thể demo trên local host. Server Windows này vẫn nên setup, e đã gửi các thông tin liên quan tới việc quản lý server cho Thầy, Thầy chuyển cho Huy, Hậu, 2 bạn có thể cover việc này, cũng như duy trì vận hành của server về sau. Setup xong Web Application này mình có thể public ra website của Lab, tuy nhiên, vì server chưa có public IP nên app sẽ chỉ chạy được cho các máy tính trong nội bộ tòa nhà :D

Nếu tiếp tục đầu tư cho phiên bản web của wissim, thì nên mở rộng wissim server, cung cấp thêm API cho việc nhận file trace, có thể gọi từ bên ngoài không phụ thuộc thư viện Thrift.

---------- Forwarded message ----------
From: "Phạm Quốc Ân" <phamquo...@gmail.com>
Date: Jun 18, 2015 6:54 PM
Subject: Mã nguồn Project 2
To: "Trong Nguyen" <ductron...@gmail.com>
Cc:

 Em chào anh!

 Chiều nay em có nên bảo vệ Project 2 với thầy Văn. Nhưng vì phần mã nguồn em chưa thử up lên một server nào nên thầy Văn có hơi băn khoăn về phần truyền dữ liệu giữa client và server trong mã nguồn của em. Thầy có bảo em gửi cho anh mã nguồn để anh kiểm tra giúp em xem phần mã nguồn của em thực sự đã thực hiện được việc truyền file giữa server với client hay chưa. Anh xem giúp rồi trả lời em sớm nhé. Phần em thực hiện truyền dữ liệu giữa client và server nằm trong file service.svc

 Em cảm ơn anh!​

Truong Thao Nguyen

unread,
Jun 18, 2015, 12:48:16 PM6/18/15
to wis...@googlegroups.com, Ân Phạm, Sen K55
Hi all

Trước hết em xin comment lại vài ý của Trọng. Sau đó, em sẽ phân tích vấn đề một cách rõ ràng hơn cho thầy và các em có hướng phát triển tiếp tục sau này.


Phân tích vấn đề kết nối giữa client và server
Trước kia khi phát triển desktop application, việc kết nối giữa client và server được giải quyết bằng các kết nối dựa trên nền socket - TCP. Đây là kiểu kết nối phổ biến giữa các thành phần ứng dụng phần mềm. Bên cạnh đó, do yêu cầu có thể tích hợp được nhiều môi trường khác nhau cho cả client và server nên thrift được lựa chọn.

Tại bản Desktop, trước đây a Nguyên sử dụng thư viện Thrift để generate ra module truyền file, chứ không xây dựng theo dạng api.
Đoạn này không hiểu Trọng định nghĩa API cụ thể là gì. Tuy nhiên nếu hiểu API chỉ là cách giao tiếp giữa 2 hay nhiều thành phần thì module trên chính là API rồi.
Để hỗ trợ nhiều môi trường khác nhau, thrift đề ra một loại ngôn ngữ để khai báo API một cách tổng quát. Từ khai báo API này, Thrift_Generator (thành phần của thrift) sẽ generate ra code của các API giao tiếp đó theo ngôn ngữ lập trình tương ứng (ví dụ C# ở client, python ở phía server). Sau đó người lập trình có thể build lại code này thanh một thư viện, ví dụ dạng dll chẳng hạn, hoặc tích hợp vào ứng dụng của họ để sử dụng (ví dụ như em chọn phương án sau đối với wissim desktop application).

Hiện tại chúng ta nhắm tới việc phát triển ứng dụng trên nền web. Công nghệ mà em Sen và Ân lựa chọn là Silverlight. Vì Silverlight và C# đều dựa trên dotnet Framework và cùng lập trình bằng C# nên việc chuyển code sẽ nhanh.
Thrift không hỗ trợ Silverlight - công nghệ dược sử dụng cho bản webApplication
Bộ thư viện Thrift trong Wissim Desktop Application là bản cũ 0.8.x nên nó chưa có phần mở rộng C# cho tích hợp silverlight, Em có thể download các bản 0.9.x trở lên. Bản này đuợc thông báo là có tích hợp cho silverlight. Hoặc nếu em tiêp tục sử dụng bản 0.8.0 thì có thể Generate lại API ở C# bằng cách theo hướng dẫn sau. Anh không biết là các em đã thử làm theo chưa?
http://damianblog.com/2011/01/11/generating-silverlight-windows-phone-compatible-thrift-proxies/.
(còn vể bản chất tại sao thrift cũ ko hỗ trợ silver light - nếu các em cần anh có thể giải thích rõ hơn).

Cách giải quyết tạm thời của Trọng là
Lúc đó em đã đề ra một giải pháp tình thế là sử dụng phương thức html để download trực tiếp file trace về client
bản chất của cách này là không thao tác trực tiếp với socket ở tầng TCP mà sử dụng giao thức HTTP ở tầng Application. Cách này rõ ràng sẽ chậm hơn so với sử dụng socket hay thông qua giao thức FTP (kiểu share file trực tiếp chả hạn.)

Tuy nhiên anh không hiểu được là tại sao Trọng bảo download tracefile về client mà về sau lại có share file giữa 2 server :)

Tóm lại ta có 3 cách tiếp cận:
(1) TCP --> thrift
(2) HTTP --> chắc là webservice (như trọng gọi là phương thức html)
(3) FTP / share file ....

Best ,

--
You received this message because you are subscribed to the Google Groups "wissim" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wissim+un...@googlegroups.com.
To post to this group, send email to wis...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/wissim/CAEsDhbXsTBZvsifzCg_zRKY1rF4T9eRr0JS_XHJ4Qs0f6Qn%3DDA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.



--
---------------------------------------------------
Truong Thao Nguyen
Doctor student, SOKENDAI Japan
Mobile: (+84)984.196.715
Email: nguyen...@gmail.com, nguy...@nii.ac.jp
Y!M: thao_nguyen_1988

Van Nguyen

unread,
Jun 19, 2015, 7:13:58 AM6/19/15
to wis...@googlegroups.com, Ân Phạm
Hi Nguyên & Trọng

May quá Nguyên vẫn nhiệt tình support tiếp dự án WiSSim! Trọng trao đổi tiếp với Nguyên để tìm hướng đi tốt nhất nhé.
Hiện nay nhóm Huy và Hậu đã rỗi vì thi xong.
Hậu thì còn tiếp tục phần dynamic hole với Trọng, thầy vừa trao đổi với Huy để Huy cover phần này. Sau khi Nguyên và Trọng trao đổi với nhau, thống nhất giải pháp hay ý tưởng thì Huy sẽ trao đổi với 2 anh ý để tìm hiểu và thực hiện luôn đấy!


For more options, visit https://groups.google.com/d/optout.



--
Van K. Nguyen, Ph.D. (UC - Davis)
Department of Software Engineering
Hanoi University of Technology

Trong Nguyen

unread,
Jun 19, 2015, 10:40:24 PM6/19/15
to wis...@googlegroups.com

Em cũng đã search thử 1 số tutorial hướng dẫn sử dụng thrift cho silverlight, nhưng giao cho Sen, Ân thì các bạn làm không được.
Theo ý kiến a Nguyên, e thấy có thể thử nghiệm version cao hơn của thrift, bản có hỗ trợ silverlight

Truong Thao Nguyen

unread,
Jun 20, 2015, 10:33:54 AM6/20/15
to wis...@googlegroups.com
Anh cũng mới đọc thông tin thôi nhưng chưa thử nghiệm hết. Nếu theo hướng thrift thì với Ân có thể làm mấy thao tác sau:
1. Tìm lại thrift.dll version (0.9.0 trở lên để thay thế cho bản hiện tại trong project (0.8.x). Bản thân phần thrift generate cài đặt trên server đang là 0.9.x (như phần hướng dẫn cài đặt ấy.

2. Nếu cần thiết thì làm theo cái tutorial anh gửi link ở email trước, để generate lại cái module trao đổi thông tin (code module này ở folder \Controller\Connector\WissimConnectorInterface). Bước generate lại này là để đảm bảo trong code được generated ra đã có các chỉ dẫn biên dịch dành cho silverlight.
Nếu em Ân chưa đủ khả năng sử lý thì lúc nào có thể nhờ Huy xem giúp để 2 đứa ngồi 1 buổi làm cùng. Huy nhanh và được bàn giao phần python server rồi nên hiểu rõ vấn đề hơn chút.

Ngòai ra:
+ Trong trường hợp cả 2 phương án này mà vẫn không tích hợp vào silverlight được thì anh nghĩ đàng phải dùng cách của trọng thông qua chia sẻ file.
+ Tất nhiên vẫn có những cách khác nhưng chúng ta cần phải thay đổi khá nhiều cả ở phía webClient lẫn phía server. Nếu cần Trọng có thể cho các bạn tìm hiểu thêm vể nodejs để xây dựng một nodejs server trao đổi thông tin thay cho thrift cũng được. Khi đó ở server có 2 lựa chọn:  (1) Convert code ở server từ python sang nodejs. (2) Code python đã được viết ở dạng class. Nên em có thể tận dụng lại bằng cách từ code nodejs gọi hẳn tiến trình của python để nó xử lý hộ =)).
+ Một ý tưởng khác là xây dựng client dưới dạng addon của firefox hay chrome chẳng hạn. Với cách này thì việc download file sẽ không bị hạn chế của việc tích hợp giữa thrift và silverlight nữa (vì addon này được lập trình bằng javascript đối với Firefox và được hỗ trợ tốt như thrift thông báo).Việc hiển thị thì vẫn dùng Silverlight như thường. Tất nhiên nó sẽ bị phụ thuộc vào browser mà người dùng sử dụng không còn đúng với tính chất ban đầu nữa. Cách addon này có thể coi như là kiểu mở rộng cho cách xấu nhất là ta phải dùng đến HTTP request để lấy được tracefile. Khi đó mình hỗ trợ người dùng download nhanh hơn thông qua addon chẳng hạn.

Best regards,


For more options, visit https://groups.google.com/d/optout.

Vu Quoc Huy

unread,
Jun 23, 2015, 5:46:52 AM6/23/15
to Truong Thao Nguyen, wis...@googlegroups.com
Dear thầy, anh Nguyên và anh Trọng,

Hôm nay anh Trọng đã trao đổi lại với em về vấn đề này, em có ý kiến sau muốn hỏi thầy và các anh ạ:

- bản web client hiện tại được code chạy trên Silverlight, theo phân tích thì thực tế bản client không thật sự tốt (về cả mặt source code và kiến trúc - do Silverlight chạy phụ thuộc vào nền tảng, không như HTML5). Định hướng ban đầu là mình code bằng ASP.NET nhưng do giới hạn về thời gian nên phải chuyển sang Silverlight. 

=> Như vậy thì mình có thể chuyển hẳn sang code lại từ đầu bằng một công nghệ hợp lý hơn mà thrift đã hỗ trợ tốt. Do đó em nghĩ nếu mình có kế hoạch làm một bản web application thì có thể code bằng Ruby hoặc PHP (do em và Hậu đã có kinh nghiệm code trên 2 ngôn ngữ này, 1 phần là Ruby đang rất được ưa chuộng trong web application). 

-- 
Vu Quoc Huy

Truong Thao Nguyen

unread,
Jun 23, 2015, 6:07:37 AM6/23/15
to Vu Quoc Huy, wis...@googlegroups.com
Hi Huy
Anh chưa rõ là hiện tại bản client của mình thao tác đến đâu nhưng Huy cũng nên cân nhắc mình chọn silverlight vì nó khá giống wpf và nó hỗ trợ đồ họa khá tốt (việc vẽ vời + tạo animation). Nếu phần Ruby hoặc PHP của em làm được việc như vậy (có thể có các thư viện hỗ trợ sắn) thì phương án của em cũng cần làm rõ một số điểm sau:
Hiện tại Silverlight được sử dụng nên việc xử lý (parsing, draw) đều được thực hiện ở phía client. Chắc phía server chỉ làm việc đơn giản là trả lại file trace (đúng với yêu cầu của người dùng - tạm gọi là quản lý session). Nếu em xây dựng theo hướng Ruby hoặc PHP, mô hình hiện giờ sẽ có 3 thành phần: brower (client), web server(quản lý các truy cập web qua giao thức HTTP, và NS2server (server chứa ns2, tracefile...) người dùng sẽ yêu cầu truy cập vào 1 web server (apache,...) để lấy thông tin.
+ Vậy thì việc xử lý parsing sẽ nằm ở phía webserver, NSserver hay phía client.
+ Việc draw và animation là chắc chắn nằm ở phía client rồi nhưng trong phần này cũng có câu hỏi đặt ra là em dữ liệu được truyền 1 lần hay nhiều lần (dữ liệu có thể là ở dạng file trace hoặc ở 1 dạng nào đó sau khi parse xong nhé)...
==> Làm rõ mấy cái này các em sẽ làm rõ được flow hoạt động của hệ thống rồi. Nếu mọi thứ rõ ràng thì anh nghĩ là sẽ khả thi (tuy hơi mất công một chút).

Tuy nhiên, với ý kiến của anh là không cần thiết phải sửa đổi nhiều như thế nếu như web application của mình hoạt động được tốt.

- bản web client hiện tại được code chạy trên Silverlight, theo phân tích thì thực tế bản client không thật sự tốt (về cả mặt source code và kiến trúc
--> Em nên bàn bạc với Trọng và thầy kĩ hơn để làm rõ về vấn đề này. Tại sao em lại nhận định như vậy  :) Anh ko rõ code hiện tại thế nào lắm. ;)

 Tóm lại là em cần làm rõ được
(i) Một số điểm chưa tốt của hệ thống hiện tại
(ii) Chi tiết hơn một chút (phác thảo) về hệ thống bằng Ruby hoặc php nếu em muốn phát triển bằng nó. (thực ra ngôn ngữ không quá quan trọng nhưng nó ảnh hưởng đến một số kĩ thuật đi kèm =) )

Best,

Vu Quoc Huy

unread,
Jun 23, 2015, 6:26:10 AM6/23/15
to Truong Thao Nguyen, wis...@googlegroups.com
Hi anh,

Ý kiến em đưa ra trong trường hợp nếu mình không dùng lại code Silverlight hiện tại ạ. Tất nhiên là nếu dùng bản hiện tại ổn định thì em sẽ khắc phục Thrift để dùng luôn. 

Trong hệ thống mới thì pha draw, animation sẽ dùng lại kết quả của pha parsing, thực hiện bên phía client nên mình chỉ cần giải quyết vấn đề parsing. Về parsing thì em nghĩ là không thể truyền qua lại cả file trace dung lượng cao, nên ở phía webserver sau khi nhận được trace file từ NSserver, sẽ thực hiện 1 số công việc tinh giản lại file trace thành dạng nhẹ hơn (như json), và chỉ chứa những thông tin phù hợp với chức năng bản web app. Việc truyền 1 hay nhiều lần thì có thể phụ thuộc vào chức năng của web app, nếu chỉ là làm mạng nhỏ, đơn giản thì hoàn toàn có thể cho tinh giản các trường k cần thiết trong file trace, và được gửi nhiều lần (tuỳ thuộc vào request của người dùng như lọc gói tin chẳng hạn …), hoặc cũng có thể đặt ra một ngưỡng: nếu dung lượng trace lớn hơn ngưỡng thì mình sẽ gửi nhiều lần tuỳ thuộc vào request lọc gói tin của người dùng, ngược lại dung lượng nhỏ mình có thể gửi toàn bộ 1 lần ạ. 



-- 
Vu Quoc Huy
Reply all
Reply to author
Forward
0 new messages