tornado websocket 怎么区别每个连接的用户?
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
我想改进下
页面上设置好用户名,然后每次发言的时候带上用户名
这个应该怎么改?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
用session。或者用cookie
GoEasy实时Web推送,支持后台推送和前台推送两种:后台推送可以选择Java SDK、 Restful API支持所有开发语言;前台推送:JS推送。无论选择哪种方式推送代码都十分简单(10分钟可搞定)。由于它支持websocket 和polling两种连接方式所以兼顾大多数主流浏览器,低版本的IE浏览器也是支持的。另外GoEasy针对前台推送采用OTP (one-time-password)方式加密方式,能有效杜绝他人通过在页面上获取 appkey的方式,进行非法操作,十分安全!GoEasy多机房部署,支持全球推送。个人觉得十分值得推荐: goeasy.io