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 中关注的所有用户(边缘)获取帖子(顶点)

如何在 .net mvc 中使用 c# 创建和删除边缘属性(Titan 1.0)?

持久化数据、并发访问和清除 Titan DB

Gremlin - Giraph - GraphX ?在 TitanDb 上