tạo CHat ROOM cho web

Deathknight

Active Member
TỰ LÀM MỘT PHÒNG CHAT KIỂU TRANG WEB BẰNG ASP
(WEB-BASED CHATROOM)
[Tác giả: Guest, viết cho Diễn đàn tin học]

PHẦN 1: CƠ BẢN

Kiến thức cần biết:

ASP: Biến cấp Session và Application

HTML: Frame và Form

java script: cơ bản

Mức độ: trung bình

Tôi là "thường trú nhân" của chatroom của Diễn đàn tin học, nhưng thích viết cái ASP chatroom là để thêm chức năng gửi "private message". Viết xong rồi thử, rồi sửa, rồi thử tiếp...nhưng đến hôm nay nó vẫn còn nhiều khuyết điểm. Chắc là tại thời gian có hạn mà trình độ cũng giới hạn! Thôi đành viết bài này, rồi đưa mã nguồn lên đây luôn. Biết đâu trong số các bạn đang đọc bài này sẽ có người trở thành cao thủ, rồi sửa hết khuyết điểm của cái chat cho tất cả được nhờ.

Giới thiệu

Có nhiều cách tạo chatroom, cách thông thường nhất là dùng Java. Trong đó người ta tạo ra một chương trình cho máy chủ và một chương trình khác chạy trên máy trạm. Khi bạn truy xuất đến trang web, ví dụ http://www.vietchat.com, thì trình duyệt web sẽ tải về đoạn mã java và chạy tại máy của bạn. Chương trình java này sẽ tạo một kết nối bằng đường socket của TCP/IP đến máy chủ. Kết nối này được xác lập và định vị bằng địa chỉ IP máy chủ, địa chỉ IP máy trạm, và cổng (port) cố định nào đó. Kết nối này là kết nối 2 chiều, nghĩa là dữ liệu sẽ được chuyển từ máy chủ về máy trạm và ngược lại. Khi nào bạn còn hiện diện trong phòng chat thì kết nối này còn duy trì. Chương trình java trên máy của bạn sẽ truyền nội dung chat đến máy chủ và từ máy chủ về máy bạn qua kết nối này. Loại phòng chat này chạy rất nhanh và có nhiều chức năng vì đây là những kết nối liên tục (không bị đứt quãng giữa chừng). Tuy nhiên nhược điểm là không dùng được cho người dùng internet ở bên trong 1 bức tường lửa (firewall) hay proxy server, vì firewall sẽ giới hạn người dùng chỉ được sử dụng 1 số cổng nhất định nào mà thôi. Firewall Việt Nam chỉ cho sử dụng một số cổng chuẩn (phổ biến) là cổng 80 (dùng cho HTTP), cổng 21 (dùng cho FTP)...Nếu chương trình sử dụng một cổng nằm ngoài danh sách cho phép của firewall VN thì coi như là bị khóa.

Để tránh nhược điểm này, người ta nghĩ ra cách làm phòng chat bằng HTML thuần tuý. Nguyên tắc như sau:

Trên máy trạm bạn sẽ truy xuất 1 trang web có ít nhất 2 frame, một trong 2 frame đó sẽ có form cho phép bạn nhập dữ liệu.

Dữ liệu bạn nhập vào được chuyển về máy chủ và ghi xuống một biến ở cấp application (biến ở cấp application là biến mà mọi người đang kết nối với máy chủ đều truy xuất được).

Frame thứ hai sẽ lấy thông tin chat từ máy chủ qua biến cấp application này. Do nội dung chat luôn luôn thay đổi nên frame thứ hai sẽ được đặt ở chế độ làm tươi liên tục. Nếu bạn đặt thời gian làm tươi là 5 giây thì cứ sau mỗi 5 giây, bạn mới thấy được những câu chat mới được gửi từ những người khác trong phòng chat.

Tuy nhiên chương trình chat kiểu này có nhược điểm: cách truyền dữ liệu theo kiểu trang web (nghi thức HTTP) là đường truyền 1 chiều, nghĩa là chỉ có máy trạm là chủ động ra yêu cầu cần dữ liệu, máy chủ nhận được yêu cầu thì trả lời, không có trường hợp ngược lại là máy chủ yêu cầu dữ liệu từ máy trạm. Chính lý do này ta cần phải làm tươi (refresh) nội dung của trang web trên máy trạm.
[img=http://www.diendantinhoc.net/tute/laptrinh/asp/chat/chatroom.gif
][/img]

Thực hiện:

Cấu trúc trang web
Trong bài viết này, chúng tôi sẽ hướng dẫn cách làm 1 phòng chat bằng ngôn ngữ ASP. Cửa sổ chat gồm có 3 phần: 2 phần như đã nói trên, đó là phần nội dung chat và phần nhập liệu. Phần thứ ba là hiển thị danh sách những người đang có mặt trong phòng chat.

Do cửa sổ chat có 3 phần nên ta cần 3 frame như sau:

<html>
<head>
<title>ASP CHATROOM</title>
<frameset cols="130,*">
<frame name="users" src="users.asp"></frame>
<frameset rows="*,40">
<frame name="chat" src="chat.asp"></frame>
<frame name="input" src="input.asp"></frame>
</frameset>
</frameset>
</head>
<body>
Sorry, your browser does not support frames.
</body>
</html>

Bạn lưu đoạn mã trên vào file frames.html, đây là phần khung chính của toàn bộ chatroom. Trong đó frame thứ nhất tên là users sẽ chứa danh sách users, frame này sẽ gọi file users.asp trên server. Frame này sẽ làm tươi sau mỗi 25 giây nên cần có đoạn mã làm tươi như sau:

<html>
<head>
<META http-equiv="refresh" content="25">
</head>
<body>
</body>
</html>

Frame thứ hai là nội dung chat, tên frame là chat và chỉ đến file chat.asp trên server được làm tươi sau mỗi 10 giây. Bạn đánh đoạn code sau đây và lưu thành file có tên chat.asp:

<html>
<head>
<META http-equiv="refresh" content="10">
</head>
<body>
</body>
</html>

Frame cuối là để nhập dữ liệu tên là input sẽ gọi file input.asp trên server mỗi khi user nhập dữ liệu và nhấn phím enter. Vì cần phải nhập dữ liệu bằng form, nên file input.asp sẽ có chứa form như sau:

<html>
<head>
</head>
<body>
<form name="input_form" method="GET" target="_self" action="input.asp">
<input type="text" size="20" name="input_text">
<input type="submit" value="send" name="input_submit">
</form>
</body>
</html>

Đến đây bạn đã có tất cả 4 files: frames.html, users.asp, chat.asp, và input.asp. Bây giờ xin mời bạn xem tiếp cách tổ chức dữ liệu trên máy chủ.

Tổ chức dữ liệu
Danh sách users và nội dung chat sẽ được chứa trong array. Giả sử ta chỉ cần giữ lại 20 câu chat sau cùng, ta cần array 20 phần tử. Và để đơn giản, ta giới hạn số người chat nhiều nhất là 10 người ==> cần array 10 phần tử. Cả hai biến này đều ở cấp application vì mọi users đều truy xuất được. Ta đặt tên 2 biến này là Application("content") và Application("users"). Do nội dung chat là 1 array được dùng xoay vòng, ta cần 1 biến Application("pointer") để chỉ phần tử nào là mới nhất trong array. Tuy nhiên, cần thêm 1 biến đếm số users đang hiện diện trong phòng chat, biến này kiểu integer: Application("count"). Để truy xuất phần tử thứ n trong array Application("content") ta dùng cú pháp: Application("content" & n).

Để tiện cho việc lập trình, mỗi user cần lưu trữ 1 biến cấp session chứa tên đăng ký lúc vào phòng chat: Session("nick").

Các biến cấp application và cấp session sẽ được khởi tạo trong global.asa như sau:

<script RUNAT=Server Language=VBScript>

Sub Application_OnStart

Application("CHATSIZE") = 20
Application("MAXUSER") = 10

u_array = ARRAY("", "", "", "", "", "", "", "", "", "")
REDIM u_array(Application("MAXUSER"))
Application("users") = u_array

c_array = ARRAY("", "", "", "", "", "", "", "", "", "")
REDIM c_array(Application("CHATSIZE"))
Application("content") = c_array

Application("count") = 0
Application("pointer") = 0

End Sub

Sub Application_OnEnd

End Sub

Sub Session_OnStart

Session.TimeOut = 10
Session("nick") = ""

End Sub

Sub Session_OnEnd

End Sub

</SCRIPT>

Lập trình cho máy chủ
Lập trình cho máy chủ gồm những phần nhỏ sau đây: thêm 1 câu chat mới vào nội dung, hiển thị nội dung của phòng chat, và hiển thị danh sách các user đang ở trong phòng chat.
 

Tra cứu điểm thi

Phần mềm mới

Quảng cáo

11223344550983550000
Top