2012-02-21 39 views
5

我正在爲Networking類創建一個家庭作業項目,我們必須在C/C++或Python中構建一個簡單的基於Web的聊天服務器。我選擇Python是因爲我認爲這將是一種更容易實現項目的語言。我們可以使用我們在Web上找到的任何材料,因爲它很可能不具備項目所需的所有功能。事實上,教授實際上鼓勵我們使用網絡上的材料,包括教程。他沒有測試我們編碼的能力,而是我們實現網絡代碼的能力,以及我們是否完全理解所涉及的過程。Python中基於Web的聊天服務器的教程

該項目必須能夠處理多個客戶端,並且必須能夠支持多種瀏覽器,chrome,firefox等。用戶需要能夠在瀏覽器中鍵入IP地址和端口進行連接。我找不到任何可以使用的材料。我在C中找到了一點,但在Python中沒有。

有沒有人知道那裏有任何完整的教程?有很多基於客戶/服務器命令的聊天,但沒有基於瀏覽器的聊天。

回答

3

你可以看看使用TornadIO。它的一個python實現Socket.io,對於Tornado,Tornado是一個事件驅動的python web服務器。

https://github.com/MrJoes/tornadio2

http://www.tornadoweb.org/

Socket.io是一個跨瀏覽器溶液到插座從Web客戶機到服務器/插座狀連接。由於它支持pub-sub訂閱和消息,這幾乎可以爲您提供製作聊天服務器所需的所有工具。爲您的目的使用socket.io的好處是,它會嘗試一些傳輸以確保新舊瀏覽器都可以通信:Websocket,Flashsocket,xhr polling,jsonp,htmlfile。它們都以與客戶端看起來相同的方式嘗試和使用。

Tornadio2是與較新的Socket.io 0.7+兼容的較新版本。這個版本增加了許多與0.6兼容的功能。然而,原始TornadIO包含你可以查看並很容易地轉換到新版本,讓你開始一個聊天室例如:

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

+0

@jdi我知道這是一個有點舊的帖子,但不管怎樣:你如何使用這個'tornadoio'來存儲添加到數據庫的消息?我是否需要加入線程或多處理模塊,並有多個進程 - 一個用於聊天,一個用於數據庫查詢?還是有更順利的方式來做到這一點,你看到了嗎? – JohnZ 2013-04-03 02:06:18

+0

@JohnZ:我只想說讓一個工作線程阻塞在queue.get上的路線,當它收到一條消息時,它會將它添加到數據庫中。這樣你就可以從另一個線程中將消息放入隊列中,而不會阻塞任何東西。 – jdi 2013-04-03 07:40:47

1

至於我能理解,給出的家庭作業是,讓人民羣衆得到用network編程就可以開展活動。所以,不妨來看看在www.twistedmatrix.com,扭曲
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/

這一個使用普通套接字編程http://code.activestate.com/recipes/531824-chat-server-client-using-selectselect/,
http://ankurs.com/2008/05/creating-a-simple-chat-application-with-python/

這一條是基於gevent

對於不使用套接字編程的簡單聊天室模擬,以下是示例gummi

現實生活用例sourceforge