2010-12-30 39 views
6

Tôi đang cố gắng xây dựng một ứng dụng trò chuyện hoàn toàn bằng Ruby. Đã có similar question được đăng trước đó, nhưng tôi có các truy vấn khác và có liên quan. Tôi đã xem this example (Tương tự như được giới thiệu bởi người đã đăng câu hỏi tương tự trước đó). Mã trong ví dụ này dường như không hoạt động đối với tôi. Khi chạy tập lệnh ruby ​​trên thiết bị đầu cuối và kết nối với url: http://localhost:1234 trong trình duyệt của tôi, tôi vô tình gặp phải thông báo "Chuyển dữ liệu từ máy chủ cục bộ ...".Tạo ứng dụng trò chuyện bằng Ruby

Ở đây 1234 là số cổng được sử dụng trong ví dụ được cung cấp. Tôi không thể tìm ra lý do đằng sau việc chạy không thành công của tôi là gì. Có thể tôi cần phải xác định một cái gì đó trong dòng lệnh trong khi thực hiện kịch bản hoặc tôi có nghĩa vụ phải bắt đầu trò chuyện (đầu ra đầu vào) thông qua một số nơi khác (có thể là trình duyệt). Tôi không thể tìm ra chính xác những gì cần làm. Bạn có thể vui lòng giúp tôi về điều này?

Tôi đang chạy mã máy chủ trò chuyện khá nhiều chưa được sửa đổi. Tôi đang chạy dịch vụ web và máy chủ trò chuyện trên cùng một máy chủ.

Tôi đã có thể nhận được mã một phần làm việc cho tôi tối đa điểm bắt đầu vòng lặp. Mã đã sửa đổi làm việc cho tôi tối đa một điểm nhất định được đưa ra dưới đây.

require 'gserver' 

class BasicServer < GServer 

    def initialize(*args) 
    super(*args) 

    # Keep an overall record of the client IDs allocated 
    # and the lines of chat 
    @@client_id = 0 
    @@chat = [] 
    end 


    def serve(io) 
    # io.puts("Hello world!") 
     # Increment the client ID so each client gets a unique ID 
    @@client_id += 1 
    my_client_id = @@client_id 
    my_position = @@chat.size 


    # io.puts(@@chat.size)  
    # Give the total number of people who are currently on chat.. for e.g. 0 => 1 person on chat  

    # Leave a message on the chat queue to signify this client 
    # has joined the chat 
    @@chat << [my_client_id, ""] 

    # io.puts(@@chat)  

    end 

end 


server = BasicServer.new(1234) 
server.start 

#sleep 120 
#server.shutdown 

Đối với mỗi trường hợp trình duyệt một khách hàng mới được kết nối với hàng đợi trò chuyện (họ có id khách hàng duy nhất để nhận dạng chúng). Tôi muốn sử dụng lại mã trong ví dụ bằng cách thêm một hộp văn bản (một cái gì đó tương tự như những gì chúng tôi sử dụng trong html) cho (các) trình duyệt đang chạy trong đó người dùng có thể nhập thông điệp của họ và đăng nó bằng cách sử dụng cú nhấp chuột một nút (cũng được tích hợp trong trình duyệt). Điều này phản ánh trong tất cả các phiên bản trình duyệt khác của các khách hàng khác nhau và cuộc trò chuyện diễn ra như thế này cho đến khi người dùng nhập chuỗi "bỏ" để rời khỏi phòng trò chuyện.

Tôi không chắc chắn cách triển khai tính năng trên cũng như vậy trong Ruby, mọi đề xuất hoặc bài viết liên quan cần tham khảo sẽ thực sự hữu ích.

Cảm ơn rất nhiều !!

Trả lời

4

Tôi đoán rằng đây là mã duy nhất bạn đang sử dụng. Cách HTTP (giao thức trình duyệt web của bạn sử dụng khi nói chuyện với máy chủ của bạn) hoạt động, là trình duyệt kết nối với máy chủ của bạn, gửi một số dòng cho biết trang nào muốn nhận, cookie nào, vv Máy chủ trả lời, và trong hầu hết các trường hợp, đóng kết nối. Vì vậy, trong trường hợp của bạn, khi bạn kết nối với máy chủ trò chuyện trong trình duyệt web của mình, trình duyệt kết nối, BasicServer#serve được gọi, một số nội dung được gửi lại và trình duyệt web đóng kết nối, vì vậy máy chủ không thể gửi nhiều dữ liệu hơn trình duyệt. Cách dễ nhất để "sửa lỗi" này là sử dụng một cách khác để kết nối với máy chủ của bạn (hoặc telnet hoặc nc (netcat)). Nếu bạn muốn điều này nằm trong trình duyệt, bạn cần phải làm cho máy chủ của bạn phản hồi các yêu cầu HTTP và sau đó trả về một trang thường xuyên thăm dò ý kiến ​​của máy chủ (đọc trên AJAX hoặc WebSockets). Bạn có thể xem điều này để lấy cảm hứng, mặc dù nó không được viết bằng Ruby: https://github.com/ry/node_chat.

+0

Xin chào .. cảm ơn vì đã kiên nhẫn và cũng cảm ơn bạn đã trả lời .. !!. Tôi nhận ra sau một thời gian mà tôi đã thực sự thực hiện một máy chủ tcp và không phải là một máy chủ web vì vậy tôi sẽ không thể thực sự có được whats mong muốn. – boddhisattva

+0

Đây là những gì tôi có thể xây dựng dưới dạng Ứng dụng Trò chuyện: - http://boddhisattvadedicates.blogspot.in/2011/08/chat-application-using-ruby.html – boddhisattva

Các vấn đề liên quan