【发布时间】:2015-01-23 02:16:40
【问题描述】:
我正在尝试让 Tornado Websockets Demo 在 OpenShift 上运行。我是从 Python2.7 墨盒开始的。
在 app.py 中,我绑定到 OpenShift 提供的 Python 端口和 Python IP 地址。代码部署没有任何问题,我可以访问我的站点并查看静态文件和索引。在我的客户端中,我确保连接到 OpenShift 标准 websocket 端口 (8000)。
但是,我无法发送或接收数据。每当我尝试发送消息时,我的浏览器控制台中都会出现以下错误:
WebSocket 已经在 CLOSING 或 CLOSED 状态。
我在下面包含了相关的代码部分:
app.py
import ...
ON_PAAS = 'OPENSHIFT_PYTHON_DIR' in os.environ
if ON_PAAS:
port = int(os.environ['OPENSHIFT_PYTHON_PORT'])
host = os.environ['OPENSHIFT_PYTHON_IP']
debug = False
dir_virtualenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/'
virtualenv = os.path.join(dir_virtualenv, 'bin/activate_this.py')
try:
execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
pass
else:
port = 8000
host = '127.0.0.1'
debug = True
define("port", default=port, help="run on the given port", type=int)
define("host", default=host, help="run on the given host", type=str)
define("debug", default=debug, help="run in debug mode")
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", MainHandler),
(r"/chatsocket", ChatSocketHandler),
]
settings = dict(
cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
xsrf_cookies=True,
)
tornado.web.Application.__init__(self, handlers, **settings)
class MainHandler(tornado.web.RequestHandler):
...
class ChatSocketHandler(tornado.websocket.WebSocketHandler):
...
def main():
tornado.options.parse_command_line()
app = Application()
app.listen(options.port, address=options.host)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
聊天.js
...
var updater = {
socket: null,
start: function() {
var url = "ws://" + location.host + ":8000/chatsocket";
updater.socket = new WebSocket(url);
updater.socket.onmessage = function(event) {
updater.showMessage(JSON.parse(event.data));
}
},
showMessage: function(message) {
var existing = $("#m" + message.id);
if (existing.length > 0) return;
var node = $(message.html);
node.hide();
$("#inbox").append(node);
node.slideDown();
}
};
编辑:I assume that OpenShift supports WebSockets. 虽然文档不是很详尽。
【问题讨论】:
标签: javascript python websocket openshift tornado