Titan Gremlin 服务器给出错误“不是 WebSocket 握手请求:缺少升级”
Posted
技术标签:
【中文标题】Titan Gremlin 服务器给出错误“不是 WebSocket 握手请求:缺少升级”【英文标题】:Titan Gremlin Server is giving Error "not a WebSocket handshake request: missing upgrade" 【发布时间】:2016-09-12 23:54:15 【问题描述】:我从 url 下载了 EC2 服务器上的 Titan 1.0 版
Titan 1.0.0 with Hadoop 1 – recommended
然后我解压缩并使用以下命令运行 Titan 服务器:
bin/titan.sh 启动
Forking Cassandra...
Running `nodetool statusthrift`... OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9300).... OK (connected to 127.0.0.1:9300).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182).... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.
然后我尝试了 Titan 1.0 版本中的 HTTP 请求(在 Titan 0.4 版本中 Rexster 工作正常) 但我得到以下错误
不是 WebSocket 握手请求:缺少 upgrade
【问题讨论】:
【参考方案1】:使用默认设置,您无法通过 HTTP 连接连接到 Titan v1.0.0。更准确地说,您无法通过 HTTP 连接到 Gremlin Server。
使用 Titan 时,您还使用了来自 Apache TinkerPop framework 的 Gremlin 服务器。 Gremlin 服务器接受 WebSocket 连接(默认)并将查询转发到 Titan 服务器。
对于 TinkerPop v3.0.1 附带的 Titan v1.0.0(因此 Gremlin 服务器 v3.0.1),您需要在 conf/gremlin-server/gremlin-server.yaml
文件中手动配置 HttpChannelizer
:
channelizer: org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer
另请参阅:TinkerPop v3.0.1 documentation: Connecting via REST。
这将替换默认的WebSocketChannelizer
,并允许您通过 HTTP 向 Gremlin 服务器发送查询。当您运行 ./bin/titan.sh start
时,实际上是在启动 Gremlin Server 以及所有与 Titan 相关的东西(默认设置中的 Titan 实例、Cassandra 和 Elasticsearch)。
如果您必须使用浏览器但仍希望使用 WebSocket 连接,您可以使用 https://github.com/jbmusso/gremlin-javascript,它是 Gremlin 服务器的 JavaScript (Node.js/Browser) 客户端。它支持浏览器中的 WebSocket 连接。使用此设置时,您无需编辑 gremlin-server.yaml
文件中的任何内容。
【讨论】:
以上是关于Titan Gremlin 服务器给出错误“不是 WebSocket 握手请求:缺少升级”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Gremlin/Titan/TinkerPop3 更新特定的边缘属性?
如何使用 Gremlin 在 Titan 中获取 Edge 日期属性大于上次访问日期的通知?
如何使用 Gremlin 从我在 Titan 中关注的所有用户(边缘)获取帖子(顶点)