Tornado 不处理 linux 上的 node-http-proxy websockes
Posted
技术标签:
【中文标题】Tornado 不处理 linux 上的 node-http-proxy websockes【英文标题】:Tornado does not handle node-http-proxy websockes on linux 【发布时间】:2013-04-27 17:24:21 【问题描述】:如果我启动服务器 python wsserver.py
,然后运行 python wsclient.py --host localhost --port 8888
,tornado 服务器和客户端的行为将按预期进行。
但是,如果我也启动代理服务器:node node_modules/http-proxy/bin/node-http-proxy --port 8889 --host localhost --target localhost:8888
然后python wsclient.py --host localhost --port 8889
确实连接,但没有消息传递。
这在 Max osx 上运行良好,但在 ubuntu 和 centos 上失败。
wsserver.py:
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
print "opened a new websocket"
listeners.append(self)
print listeners
def on_message(self, message):
self.write_message(u"You Said: " + message)
print ("in on_message " + message)
def on_close(self):
print 'connection closed'
listeners.remove(self)
def main():
application = tornado.web.Application([(r'/ws', WSHandler)])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
wsclient.py:
# must pip install websocket-client first
from argparse import ArgumentParser
def main():
parser = ArgumentParser()
parser.add_argument('--port', type=int, required=True)
parser.add_argument('--host', required=True)
args = parser.parse_args()
from websocket import create_connection
ws = create_connection("ws://%s:%s/ws" %(args.host, args.port))
print "Sending 'Hello, World'..."
ws.send("Hello, World")
print "Sent"
print "Reeiving..."
result = ws.recv()
print "Received '%s'" % result
ws.close()
if __name__ == '__main__':
main()
如何调试?
版本:
节点:0.9.9 http-代理; 0.10.2 蟒蛇:2.7 龙卷风:2.4.1【问题讨论】:
【参考方案1】:你能用 node v0.6.x 试试吗? 据我所知,node-http-proxy 与 websockets 有一些头问题,因为从来没有 node 版本(不确定它从哪个版本开始)。我确定使用较低的节点版本你应该没问题。
【讨论】:
Node v0.6.12 适用于 ubuntu 和 centos。但是,当代理在 Mac osx 上运行时,所有版本的节点都可以工作以上是关于Tornado 不处理 linux 上的 node-http-proxy websockes的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 检测到某些东西已插入 linux 上的音频插孔?
Tornado websocket 处理程序,self.close() 正在关闭连接而不触发 on_close() 方法