Форум сайта python.su
Решил изучить WebSocket и попробовать написать простой чатик для теста. Для Python поддержка вебсокетов реализована библиотекой http://bitbucket.org/rushman/tx-websockets/ для Twisted, есть презентация Кириллова Сергея с PyKyiv и видео http://pycamp.org.ua/presentation/2 но к сожалению библиотека не поддерживает последнею спецификацию протокола.
Следующей на очереди был Tornado, в последних версиях добавилась поддержка вебсокетов. Немного повозившись, получил более менее работающий пример.
# -*- coding:utf8 -*-
import os
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.websocket
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
class WebSocket(tornado.websocket.WebSocketHandler):
def open(self):
print "WebSocket opened"
def on_message(self, message):
print self.request.remote_ip + " say: " + message
self.write_message(self.request.remote_ip + " => " + message)
def on_close(self):
print "WebSocket closed"
settings = {
"static_path": os.path.join(os.path.dirname(__file__), "static"),
"template_path": os.path.join(os.path.dirname(__file__), "templates")
}
application = tornado.web.Application([
(r"/websocket", WebSocket),
(r"/", MainHandler),
], **settings)
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
Офлайн
Например так - http://thomas.pelletier.im/2010/08/websocket-tornado-redis/
Если Вы просто хотите познакомится с WS, то Redis оттуда можно в принципе выкинуть. Но для реальных проектов его лучше оставить, так как обычно серверы tornado запускают по несколько штук.
Офлайн
ziroСпасибо, то что нужно. Думал о создание списка со всеми соединениями, но решил что в торнадо это каким то своим образом делается.
Например так - http://thomas.pelletier.im/2010/08/websocket-tornado-redis/
Если Вы просто хотите познакомится с WS, то Redis оттуда можно в принципе выкинуть. Но для реальных проектов его лучше оставить, так как обычно серверы tornado запускают по несколько штук.
Офлайн
ziroТам внизу есть комментарий:
Например так - http://thomas.pelletier.im/2010/08/webs … ado-redis/
Your solution seems incorrect. It is generally forbidden to call tornado functions from threads. It's a single-threaded server and using multiple threads can cause strange things to happen under high load. See:Как с этим быть?
http://groups.google.com/group/python-tornado/msg/a7385e3a2b3ef20d
Офлайн
name23Да очень просто - написать свой клиент для работы с redis поверх ioloop. Возможно уже есть опубликованный - не смотрел. За основу можно взять https://github.com/bitly/asyncmongo
Как с этим быть?
Офлайн