使用tornado实现本地聊天室

来源:互联网 发布:小学语文网络研修微课 编辑:程序博客网 时间:2024/06/10 03:27

使用tornado实现简单地本地聊天室

1.开发环境

2.tornado源码下载以及编译安装

3.聊天室全部源码

4.使用说明


1.开发环境

(1)本例程是在ubuntu12.04上面实现的
(2)python解析器是2.7版本:
在有网络的情况下可以:sudo apt-get install python
在没有网络的情况下可以从这个链接下载:
python解析器下载地址
注意请下载2.7版本的;然后解压,进入解压好的目录依次执行:
./configure –prefix=${pwd}
make
sudo make install
大功告成

2.tornado源码下载以及编译安装

(1)tornado源码的下载:
git clone git://github.com/facebook/tornado.git
(2)编译安装tornado
进入源码下载目录tornado:cd tornado
编译:sudo python setup.py build
安装:sudo python setup.py install
注意执行sudo python setup.py install的时候需要联网

3.聊天室全部源码

建立一个目录mytalk:mkdir mytalk
进入该目录:cd mytalk
建立我们的服务器python源文件:touch main.py
建立存放html的目录:mkdir myhtml
进入myhtml:cd myhtml
建立我们的html文件:touch index.html
回到mytalk,下面是我使用tree命令查看我们生成的结构:

/mytalk# tree.├── main.py└── myhtml    └── index.html

我们的源码文件总共两个一个python脚本main.py,一个html文件index.html。下面是我们的源码:

#filename:main.py#This is the server sourceimport tornado.webimport tornado.ioloopclass Index(tornado.web.RequestHandler):    def get(self):        self.render('myhtml/index.html')import tornado.websocketimport jsonclass SocketHandler(tornado.websocket.WebSocketHandler):    clients=set()class SocketHandler(tornado.websocket.WebSocketHandler):    clients=set()    @staticmethod    def send_to_all(message):        for c in SocketHandler.clients:            c.write_message(json.dumps(message))    def open(self):        self.write_message(json.dumps({            'type':'sys','message':'Welcome to webSocket',        }))        SocketHandler.send_to_all({            'type':'sys',            'message':str(id(self))+'has joined',        })        SocketHandler.clients.add(self)    def on_close(self):        SocketHandler.clients.remove(self)        SocketHandler.send_to_all({            'type':'sys',            'message':str(id(self))+'has left',        })    def on_message(self,message):        SocketHandler.send_to_all({            'type':'user',            'id':id(self),            'message':message        })if __name__=="__main__":    app=tornado.web.Application([        ('/',Index),        ('/soc',SocketHandler),    ])    app.listen(8000)    tornado.ioloop.IOLoop.instance().start()

上面使我们的server源码我们看到他用到了我们的:
def get(self):
self.render(‘myhtml/index.html’)
这个就是我们的html文件源码如下:index.html

<html><head><script>var ws = new WebSocket('ws://localhost:8000/soc');ws.onmessage=function(event){    var table = document.getElementById('message');    var data =eval('('+ event.data+')');    ({        'sys':function(){            var cell =table.insertRow().incertCell();            cell.innerHTML =data['message'];        },        'user':function(){            var row=table.insertRow();            row.insertCell().innerHTML=data['message'];            row.insertCell().innerHTML=data['id'];        },    }[data['type']])();};</script><script>function send(){    ws.send(document.getElementById('chat').value);    document.getElementById('chat').value='';}</script></head></body><input id='chat'><button onclick='send()'>Send</button><table id='message' border='1'></table>

4.使用说明

进入我们的源码目录执行main.py:suso python main.py
此时我们的聊天服务器就启动了
打开浏览器输入:http://localhost:8000/
注:多打开几个浏览器页面,这就是我们的浏览器客户端会看到如下图片:
浏览器运行结果图

0 0
原创粉丝点击