2012-02-21 32 views
5

Tôi đang làm việc trên một dự án bài tập về nhà cho lớp Mạng nơi chúng tôi phải xây dựng một máy chủ trò chuyện dựa trên web đơn giản bằng C/C++ hoặc Python. Tôi đã chọn Python vì tôi nghĩ nó sẽ là ngôn ngữ dễ dàng hơn để triển khai dự án. Chúng tôi có thể sử dụng bất kỳ tài liệu nào mà chúng tôi tìm thấy trên web, vì rất có thể sẽ không có tất cả chức năng mà dự án yêu cầu. Trong thực tế, giáo sư thực sự khuyến khích chúng tôi sử dụng tài liệu từ web bao gồm cả hướng dẫn. Anh ấy không thử nghiệm chúng tôi về khả năng viết mã của chúng tôi thay vì khả năng thực thi mã mạng của chúng tôi và chúng tôi có hiểu rõ các quy trình liên quan hay không.Hướng dẫn cho máy chủ trò chuyện dựa trên web bằng Python

Dự án phải xử lý nhiều khách hàng và phải hỗ trợ nhiều trình duyệt, chrome, firefox, v.v. Người dùng cần có thể nhập Địa chỉ IP và Cổng trong trình duyệt để kết nối. Tôi không thể tìm thấy bất kỳ tài liệu nào để làm việc. Tôi đã tìm thấy một chút trong C nhưng không có gì trong Python.

Có ai biết bất kỳ hướng dẫn đầy đủ nào không? Có rất nhiều cuộc trò chuyện dựa trên máy khách/máy chủ, nhưng không có cuộc trò chuyện dựa trên trình duyệt.

Trả lời

3

Bạn có thể xem bằng cách sử dụng TornadIO. Việc triển khai python của nó là Socket.io, cho Tornado, Tornado là một máy chủ web trăn hướng sự kiện.

https://github.com/MrJoes/tornadio2

http://www.tornadoweb.org/

Socket.io là một giải pháp qua trình duyệt tới socket kết nối/ổ cắm giống như từ web client đến máy chủ. Điều này sẽ khá nhiều cung cấp cho bạn tất cả các công cụ bạn cần để làm một máy chủ trò chuyện vì nó hỗ trợ đăng ký phụ pub và tin nhắn. Điều tuyệt vời về việc sử dụng socket.io cho mục đích của bạn là nó thử một số phương tiện để đảm bảo rằng tất cả các trình duyệt mới và cũ đều có thể giao tiếp: Websocket, Flashsocket, xhr polling, jsonp, htmlfile. Tất cả chúng đều được cố gắng và sử dụng theo cách giống với khách hàng.

Tornadio2 là phiên bản mới hơn tương thích với Socket.io 0.7+ mới hơn. Phiên bản này đã thêm rất nhiều tính năng đã phá vỡ khả năng tương thích với 0.6. Tuy nhiên, TornadIO gốc chứa một ví dụ phòng chat mà bạn có thể xem xét và dịch khá dễ dàng lên phiên bản mới hơn để giúp bạn bắt đầu:

https://github.com/MrJoes/tornadio/tree/master/examples/chatroom

+0

@jdi Tôi biết điều này là một bài viết hơi cũ, nhưng tuy nhiên: suy nghĩ của bạn về cách người ta sẽ lưu trữ tin nhắn được thêm vào cơ sở dữ liệu bằng cách sử dụng 'tornadoio' này? Tôi có phải kết hợp các mô-đun threading hoặc đa xử lý và có nhiều quy trình - một cho trò chuyện, một cho truy vấn db? Hoặc có cách nào mượt mà hơn để làm điều này mà bạn thấy không? – JohnZ

+0

@JohnZ: Tôi sẽ chỉ đi tuyến đường có chặn luồng công nhân trên 'queue.get' và khi nó nhận được một tin nhắn, nó sẽ thêm nó vào cơ sở dữ liệu. Bằng cách đó bạn có thể ném một tin nhắn trong hàng đợi từ một chủ đề khác và không chặn bất cứ điều gì. – jdi

1

Theo như tôi có thể hiểu được, công việc nhà nhất định là để cho mọi người được thực hiện hoạt động với chương trình network. Vì vậy, có thể có một cái nhìn tại www.twistedmatrix.com, vài trường hợp ví dụ sử dụng xoắn
Chat comet site using python and twisted,
http://lists.canonical.org/pipermail/kragen-hacks/2005-April/000409.html,
http://code.google.com/p/twisted-chat-example/.

Điều này sử dụng lập trình socket đơn giản http://code.activestate.com/recipes/531824-chat-server-client-using-selectselect/,
http://ankurs.com/2008/05/creating-a-simple-chat-application-with-python/.

Cái này được dựa trên gevent.

Đối với mô phỏng phòng trò chuyện đơn giản mà không cần sử dụng lập trình socket, đây là ví dụ gummi.

Trường hợp sử dụng thực tế tại sourceforge.

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