py:
import logging
import os.path
import uuid
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
def send_message(message):
for handler in ChatSocketHandler.socket_handlers:
try:
handler.write_message(message)
except:
logging.error('Error sending message', exc_info=True)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html')
class ChatSocketHandler(tornado.websocket.WebSocketHandler):
socket_handlers = set()
num = 0
def open(self):
ChatSocketHandler.num = ChatSocketHandler.num + 1
name = "name:%s" % ChatSocketHandler.num
ChatSocketHandler.socket_handlers.add(self)
send_message('A new user has entered the chat room.')
def on_close(self):
ChatSocketHandler.num = ChatSocketHandler.num - 1
ChatSocketHandler.socket_handlers.remove(self)
send_message('A user has left the chat room.')
def on_message(self, message):
send_message(message)
def main():
application = tornado.web.Application([
('/', MainHandler),
('/new-msg/socket', ChatSocketHandler)
], debug=True)
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8000)
tornado.ioloop.IOLoop.instance().start()
if __name__ == '__main__':
main()
html:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
hello world
<div><button id="do">send</button></div>
<div id="con"></div>
</body>
<script src="http://jinri.info/common/js/jquery.min.js"></script>
<script>
$(function() {
$('#do').click(function() {
sendMessage()
})
longMesaage()
})
//发送信息
function sendMessage() {
var url = "http://to.com/new/message"
$.post(url, {con:'hello'});
}
//长连接,查看是否有新消息
function longMesaage() {
var url = "http://to.com/new/get"
$.get(url, function(data) {
$('#con').append("<div>"+data+"</div>");
longMesaage()
})
}
</script>
</html>
这个一个简单的demo
我想改进下
页面上设置好用户名,然后每次发言的时候带上用户名
这个应该怎么改?
用session。或者用cookie