Cơ sở lý thuyết và công cụ để thiết kế 1 Giới thiệu giao thức IRC

Một phần của tài liệu thiết kế trang web (Trang 85 - 114)

II.1. Giới thiệu giao thức IRC

Giao thức IRC (Internet Relay Chart) đ• được thiết kế trong vài năm qua để sử dụng vào việc tổ chức các cuộc hội nghị bằng văn bản. Phần này xin giới thiệu về giao thức IRC.

Giao thức IRC được thiết kế trên các hệ thống dùng giao thức mạng TCP/IP, mặc dù đây không phải là môi trường yêu cầu duy nhất để IRC có thể hoạt động được.

Bản thân IRC là một hệ thống hội nghị, (mặc dù nó dùng mô hình client/server) nó là một bộ phần mềm tốt cho phép chạy trên rất nhiều máy trong một mô hình phân tán. Một kiểu cài đặt thông dụng có liên quan đến một quá trình đơn giản (server) tạo một điểm tập trung cho các client (hoặc các server khác) kết nối đến, thực hiện các chức năng phân phối (delivery)/ghép (multiplexing) các thông điệp (message) gửi đến server và các chức năng khác.

Server hình thành lên sương sống (backbone) của hệ thống IRC, cung cấp một điểm để các client có thể kết nối đến và nói chuyện với nhau, và cũng là một điểm để cho các server khác kết nối đến, tạo nên một mạng IRC. Một cấu hình duy nhất cho phép các IRC server là mô hình cây (như hình 1 dưới đây) tại đó mỗi một nút đóng vai trò là một điểm trung tâm cho phần còn lại của mạng nhìn vào.

Hình 1. Cấu trúc mạng các server IRC. II.1.2. Các máy khách (clients)

Một máy client là bất kỳ một máy nào kết nối đến server mà không phải là một server khác. Mỗi một client được phân biệt với các client khác thông qua tên riêng (nickname) có chiều dài tối đa là 9 kí tự. Ngoài tên riêng ra thì tất cả các server phải có các thông tin sau đây về các client: tên thật của máy tính mà tại đó phần mềm client đang chạy, tên người sử dụng trên máy đó, và server mà client đó nối đến.

II.1.1.1. Người điều hành (operator)

Để cho phép một khối lượng hợp lý các nội quy được giữ gìn trong mạng IRC, một loại client đặc biệt (người điều hành) được cho phép quyền thực hiện một số các chức năng điều hành trên mạng. Mặc dù các quyền được trao cho những người điều hành được coi là rất nguy hiểm nhưng nó vẫn rất cần thiết. Những người điều hành nên có quyền được thực hiện một số tác vụ cơ bản trên mạng chẳng hạn như huỷ kết nối hoặc kết nối lại các server khi cần thiết để tránh các trường hợp dùng một tuyến đường truyền xấu trong một khoảng thời gian dài. Giao thức IRC chỉ trao quyền cho người điều hành các chức năng sau: SQUIT (lệnh huỷ kết nối một server) và lệnh CONNECT (lệnh kết nối đến một server).

Một khả năng nữa của người điều hành là có thể đuổi (trục xuất) bất cứ một người sử dụng bình thường (không phải là người điều hành) nào ra khỏi mạng IRC, chẳng hạn như những người sử điều hành có thể đóng kết nối của bất kỳ một client nào đến server.

II.1.3. Các kênh (Channels)

Một kênh là một là tên một nhóm của một hoặc nhiều client và tất cả các client này đều có chung một địa chỉ gửi các thông điệp đến là tên kênh đó. Kênh được tạo ra hoàn toàn ẩn khi một người vào kênh đó đầu tiên (và kênh đó vẫn chưa được tạo ra trước khi người này vào) và kênh đó được huỷ đi khi người cuối cùng ra khỏi kênh đó. Khi kênh đ• được tồn tại rồi thì bất kỳ một người sử dụng nào cũng có thể vào kênh đó (nếu là kênh bình thường, không phải kênh ở chế độ chỉ mời mới vào được) bằng cách chọn tên kênh đó.

Tên của các kênh là các chuỗi các ký tự ( bắt đầu bởi ký tự & hoặc #) có chiều dài tối đa là 200 ký tự. Ngoài yêu cầu các tên kênh phải bắt đầu bằng ký tự & hoặc ký tự # ra thì tên không còn không được chứa dấu cách, ký tự điều khiển, hoặc dấu phẩy(,) (vì dấu phẩy được giao thức IRC dùng để phân chia giữa các các tham số của lệnh).

Giao thức này hỗ trợ hai loại kênh. Loại kênh thứ nhất là kênh phân tán (distributed channel) kênh này thì tất cả các server kết nối vào mạng đều có thể biết. Loại kênh thứ hai là kênh chỉ mời mới vào được điều này nghĩa là chỉ có các client được mời mới vào được các kênh loại này.

Để ra khỏi một kênh hiện thời thì người sử dụng đó yêu cầu phải đ• vào kênh đó rồi. Nếu như người sử dụng vào một kênh chưa tồn tại thì kênh được tạo ra và người dùng tạo kênh đó sẽ trở thành người điều hành của kênh đó. Nếu người sử dụng vào kênh đ• tồn tại thì yêu cầu vào kênh của bạn phụ thuộc vào chế độ của kênh đó. Ví dụ, nếu

như kênh đó là kênh chỉ có những người được mời mới vào được (tức là kênh được bắt đầu bởi <+i>) thì bạn vào được kênh nếu như bạn được mời. Như là một phần của giao thức IRC, thì một người dùng có thể cùng một lúc vào nhiều kênh, nhưng số kênh tối đa mà một người sử dụng có thể vào được một lúc là 10 kênh.

Nếu như một kênh bị tách rời ra bởi nguyên nhân hai server (đó là hiện tượng khi một server huỷ kết nối đến server khác) tách rời ra thì mỗi kênh trên mỗi server sẽ chỉ bao gồm những người sử dụng nối vào server đó. Khi hai kênh được ghép lại thành một (tức là khi mà hai server nối kết nối với nhau), thì các server mới nối với nhau sẽ thông báo cho nhau biết các thông tin về các kênh trên từng server. Nếu như trên hai server đó mà có kênh trùng nhau thì các lênh JOIN và MODE được hiểu thành chung một kiểu để hai phía đều chấp nhận những người sử dụng nào trên kênh và các chế độ của kênh chung đó.

II.1.3.1. Người điều hành kênh

Người điều hành kênh của một kênh nào đó được hiểu như là người chủ của kênh đó. Để nhận ra được điều này thì người điều hành kênh được trao một số quyền để điều khiển và làm cho cuộc trao đổi thông tin kênh đó luôn được lành mạnh và ôn hoà (điều này có nghĩa là nếu như một thành viên của kênh không lịch sự trong khi nói chuyện thì sẽ bị người điều hành kênh đuổi ra khỏi kênh để làm cho cuộc trao đổi trong kênh được lành mạnh).

Vì một người điều hành của một kênh, người đó không bị yêu cầu phải đưa ra nguyên nhân cho các hành động của người đó. Sau đây là các lệnh mà chỉ có người điều hành kênh mới được dùng:

KICK - Đuổi một người sử dụng ra khỏi kênh.

INVITE - Mời một người sử dụng vào một kênh chỉ mời (chế độ +i)

TOPIC - Đổi chủ đề của kênh nếu như kênh đó là kênh ở chế độ +t.

Người điều hành kênh được nhận ra bởi ký tự '@' tiếp theo sau tên riêng (nickname) của người đó và có liên quan đến một kênh (chẳng hạn như khi bạn dùng các lệnh sau để xem thông tin về người sử dụng trên mạng: NAMES, WHO và WHOIS thì bạn có thể biết được thông tin này).

II.2. Các đặc điểm kỹ thuật của IRC II.2.1. Tổng quan

Như đ• đề cập trên đây, giao thức IRC này được dùng cho cả các kết nối giữa các server và giữa các client và các server. Tuy nhiên, cũng có sự hạn chế đối với các kết nối của các client đến các server hơn là các kết nối của server với nhau.

II.2.2. Các m• ký tự

Không có một tập ký tự đặc biệt được xác định trong giao thức IRC. Giao thức IRC dùng một tập m• được tạo nên từ 8 bit, tạo thành một con số hệ bát phân. Mỗi một thông điệp (message) có thể được tạo nên từ bất kỳ số nào trong số các con số bát phân này; tuy nhiên một số số bát phân được dùng làm m• điều khiển, đóng vai trò như là phần quy định ranh giới của các thông điệp.

Các ký tự {}| được coi như là các ký tự thường và tương đương với các ký tự []\, theo thứ tự đó. Đây là một vấn đề không tốt khi so sánh hai tên riêng (nickname) với nhau.

Các server và các client giử cho nhau các thông điệp, các thông điệp này có thể sẽ tạo ra một thông điệp trả lời hoặc không tạo ra một thông điệp trả lời. Nhưn nếu một thông điệp chứa một lệnh hợp lệ thì client gửi thông điệp đó nên chờ một thông điệp trả lời từ server tuy nhiên cũng không nên đợi thông điệp trả lời quá lâu; sự giao tiếp giữa client và server và các server với các client bản chất là không đồng bộ (tức là khi gửi thông điệp đi thì không có nghĩa là ta sẽ nhận được ngay thông điệp trả lời vì thông điệp gửi đến server còn phải chờ trong hàng đợi để đến lượt được xử lý).

Mỗi một thông điệp IRC có thể chứa đến 3 phần chính: phần tiền tố (prefix) (phần này là tuỳ chọn), phần lệnh và phần các thông số của lệnh đó (phần này có thể lên đến 12 tham số). Các phần tiền tố, lệnh và các tham số được cách nhau bởi một hoặc nhiều dấu cách (có m• ASCII là 0x20 - hệ hexa).

Sự có mặt của phần tiền tố được chỉ ra bởi dấu hai chấm (':', 0x3b), ký tự dấu hai chấm này phải là một ký tự đầu tiên của một thông điệp. Và không được có dấu cách giữa dấu hai chấm này và nội dung của phần tiền tố. Phần tiền tố được server dùng để xác định phần nội dung thực sự của message. Nếu như một thông điệp không có phần tiền tố, thì thông điệp đó được hiểu là được gửi đi từ một kết nối mà từ đó thông điệp được nhận. Các client không nên dùng tiền tố khi các thông điệp được gửi đi từ chính các client đó, nếu như các client dùng một tiền tố thì chỉ duy nhất một tiền tố đúng là tên riêng (nickname) của người sử dụng có liên quan đến client đó. Nếu như nơi gửi không được xác định bằng một tiền tố thì hoặc nơi gửi thông điệp đó không cùng một liên kết với nơi nhận thì server phải tự động bỏ qua thông điệp đó.

Lệnh phải là một lệnh IRC đúng hoặc một con số gồm ba chữ số biểu diễn dưới dạng văn bản ASCII.

Các thông điệp của IRC thường là các dòng văn bản mà kết thúc bởi cặp ký tự xuống dòng và trở về đầu dòng (CR+LF), và các thông điệp đó không được dài hơn 512 ký tự kể cả cặp ký tự kết thúc CR+LF. Do đó, còn 510 ký tự cho chiều dài tối đa của một lệnh và các tham số của nó.

Trên đây là một số đặc điểm kỹ thuật cơ bản của giao thức IRC. Phần tiếp theo xin giới thiệu về công cụ để xây dựng dịch vụ hội nghị từ xa trên Web đó là ngôn ngữ lập trình Java.

II.4. Giới thiệu công cụ thiết kế dịch vụ hội nghị từ xa trên Web

II.4.1. Java hỗ trợ cơ chế đa luồng (Multi-threads) Với cơ chế đa luồng (multi-threads) đ• cho phép các chương trình viết bằng ngôn ngữ Java có thể làm được nhiều việc cùng một lúc. Điều này rất thuật lợi khi thiết kế các chương trình trên mạng. Như bạn đ• biết là khi sử dụng trên mạng thì kèm theo với thời gian sử dụng nhiều là bạn phải trả nhiều tiền nhiều cho nhà cung cấp dịch vụ. Chính vì vậy việc thiết kế một ứng dụng cho phép có thể làm được nhiều việc một lúc là một vấn đề rất quan trọng. Với Java, bạn có thể viết một chương trình để trong khi chương trình của bạn nạp các tập tin trên mạng xuống thì bạn có thể nghe nhạc, hay chương trình có thể vẽ lại màn hình, vân vân...

II.4.1.1. Giới thiệu về các Thread

Một thread là một luồng điều khiển đơn (single flow of control) nằm trong một chương trình. Đôi khi nó được gọi là mạch thực hiện (execution context) bởi lẽ mỗi thread đều phải có các tài nguyên cho chính thread đó (chẳng hạn như bộ đếm chương trình và stack thực hiện chương trình) là ngữ cảnh ("ngữ cảnh" có nghĩa môi trường và hoàn cảnh xung quanh của một đối tượng nào đó có tác dụng chi phối sự hoạt động của đối tượng đó. Ơ' đây là các tài nguyên của thread) của sự thực hiện. Tuy nhiên, tất cả các

thread trong chương trình vẫn cùng chia sẽ rất nhiều tài nguyên chẳng hạn như không gian bộ nhớ và các tập tin đ• được mở. Do đó, một thread cũng có thể được gọi là một tiến trình nhẹ (lightwieght proccess): Nó là một luồng điều khiển đơn cũng giống như một tiến trình bình thường (hoặc một chương trình đang chạy), nhưng việc tạo ra và huỷ bỏ nó cũng đơn giản hơn một tiến trình bình thường vì có ít sự quản lý tài nguyên đối với một thread hơn là đối với một tiến trình bình thường.

Một chương trình có thể bỏ ra một phần lớn thời gian thực hiện của mình để chỉ để chờ . Ví dụ, nó chờ để cho một số tài nguyên có thể truy cập được với một phép toán vào/ra, hoặc có thể nó chờ để đến thời gian quy định nào đó (time-out) để bắt đầu làm một việc gì đó. Để tăng hiệu xuất của CPU, thì tất cả các nhiệm vụ phải thực hiện với thời gian chờ lớn đều chạy thành các thread riêng biệt. Khi mà một nhiệm vụ nào đó chờ một điều gì đó xảy ra, thì trình Java run time có thể chọn một nhiệm vụ khác để thực hiện như vậy hiệu xuất của CPU sẽ được tăng lên.

II.4.1.2. Thread làm việc ra sao?

Phần này sẽ đề cập đến các thread làm việc ra sao: làm thế nào để tạo và chạy một thread, chu trình của một thread, các nhóm thread và làm sao để lấy được các thông tin về các thread và các nhóm thread.

Tạo và chạy một Thread

Khi bạn có một nhiệm vụ mà bạn muốn chạy song song với các nhiệm vụ khác, có hai cách để bạn tạo một Thread mới. Cách thứ nhất là bạn tạo một lớp (class) mới là một lớp con của lớp Thread. Lớp này nên định nghĩa lấy phương thức (method tạm dịch là "phương thức") run() để gối lên (override) phương thức run() của lớp Thread. Phương thức run() là nơi mà nhiệm vụ của bạn sẽ được thực hiện. Cũng như phương thức main() là một phương thức do người dùng định nghĩa và được gọi trước tiên khi

thực hiện một chương trình Java để bắt đầu chạy một ứng dụng, phương thức run() cũng được Java run time gọi đầu tiên để bắt đầu chạy một Thread. Ví dụ, lớp con này được tạo khi gọi lệnh new, tiếp theo là lời gọi đến phương thức start() của Thread để có thể thực hiện được phương thức run().

Một cách khác để tạo một Thread mới là khai báo một lớp thực hiện trình giao tiếp Runnable. Trình giao tiếp Runnable chỉ yêu cầu thực hiện một phương thức đó là phương thức run(). Trước tiên, bạn tạo ra một thể nghiệm (instance tạm dịch là "thể nghiệm": thể nghiệm là một khái niệm đồng nghĩa với khái niệm đối tượng khi chạy của hệ thống) của lớp bằng lệnh new, và cuối cùng là gọi đến phương thức start() của Thread để bắt đầu thực hiện nhiệm vụ được định nghĩa trong phương thức run(). Một lớp các thể nghiệm với phương thức run() được định nghĩa phải được truyền vào như là một tham số trong việc tạo Thread thể nghiệm do đó khi mà phương thức start() của thread thể nghiệm được gọi thì Java run time sẽ biết là sẽ phải thực hiện phương thức run() nào. Cách tạo thread này rất thuận tiện khi mà bạn cần tạo một phương thức run() cần phải là một lớp con của các lớp khác: lớp này có thể thừa hưởng tất cả các phương thức và các dữ liệu của các lớp mẹ khác và Thread thể nghiệm mới được tạo có thể được dùng bởi thread điều khiển.

Các phương thức điều khiển Thread

Có rất nhiều các phương thức được định nghĩa trong lớp Thread để điều khiển quá trình chạy của một thread. Sau đây xin liệt kê các phương thức hay được dùng nhất:

start() Được dùng để bắt đầu thực hiện phần nội

dung của thread, nội dung này được định nghĩa trong phương thức run(). Chương trình điều khiển sẽ ngay lập tức trở về trình gọi nó và một thread mới sẽ được đưa vào

Một phần của tài liệu thiết kế trang web (Trang 85 - 114)

Tải bản đầy đủ (DOC)

(126 trang)
w