使用Python构建基于Web的聊天服务器教程

6
我正在为网络课程的作业项目工作,我们需要使用C/C++或Python构建一个简单的基于Web的聊天服务器。我选择了Python,因为我认为它是一种更容易实现项目的语言。我们可以使用在网上找到的任何材料,因为它很可能不具备项目所需的所有功能。事实上,教授鼓励我们使用来自网络的材料,包括教程。他并没有测试我们的编码能力,而是测试我们实现网络代码的能力以及是否完全理解其中涉及的过程。
该项目必须处理多个客户端,并且必须能够支持多个浏览器,例如Chrome,Firefox等。用户需要能够在浏览器中输入IP地址和端口进行连接。我只是找不到任何可以使用的材料。我已经在C中找到了一些内容,但在Python中却没有找到。
请问有没有完整的教程可用?有很多客户端/服务器命令行聊天的教程,但没有基于浏览器的聊天系统。
2个回答

4
您可以考虑使用TornadIO。它是Socket.io的Python实现,适用于Tornado, Tornado是一个事件驱动的Python Web服务器。

https://github.com/MrJoes/tornadio2

http://www.tornadoweb.org/

Socket.io是一种跨浏览器的解决方案,用于从Web客户端到服务器的套接字/类似套接字的连接。这基本上为您提供了所有必要的工具来创建聊天服务器,因为它支持发布-订阅订阅和消息。使用socket.io的好处在于它尝试多种传输方式,以确保新旧浏览器都可以通信:Websocket、Flashsocket、xhr轮询、jsonp、htmlfile。它们都会被尝试并以对客户端看起来相同的方式使用。

Tornadio2是与较新的Socket.io 0.7+兼容的新版本。该版本添加了许多功能,但破坏了与0.6的兼容性。然而,原始的TornadIO包含一个聊天室示例,您可以轻松查看和转换为新版本,以帮助您入门:

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


@jdi 我知道这是一个有点老的帖子,但仍然想问一下:您认为如何使用tornadoio将添加的消息存储到数据库中?我是否需要结合线程或多进程模块,并拥有多个进程 - 一个用于聊天,一个用于数据库查询?还是您看到了更平稳的方法来完成这个任务? - Friendly King
@JohnZ:我建议你采用一个工作线程阻塞在queue.get上,当它接收到消息时,将其添加到数据库中。这样,你就可以从另一个线程向队列中放入消息而不会阻塞任何东西。 - jdi

1

据我所理解,这个作业的目的是让人们亲身体验 网络 编程。因此可以看一下 www.twistedmatrix.com,里面有一些使用 twisted 的示例:
使用 Python 和 Twisted 实现的聊天室网站,
http://lists.canonical.org/pipermail/kragen-hacks/2005-April/000409.html,
http://code.google.com/p/twisted-chat-example/

这个示例使用了普通的 socket 编程: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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接