如何在Go中连接到Gremlin Websocket?

问题描述:

I'm trying to connect to Gremlin which should be running on port 8182 ([INFO] GremlinServer$1 - Channel started at port 8182)

When I'm connecting to: ws://127.0.0.1:8182 I'm getting the response:

2017/11/03 17:20:04 ERROR: database with the name 'gremlin' gave an error when connecting: websocket: bad handshake.

The Gremlin server responds with:

[WARN] HttpGremlinEndpointHandler - Invalid request - responding with 400 Bad Request and no gremlin script supplied

I'm using Gorilla Websocket in Go to connect:

gremlinGrpcAddress := fmt.Sprintf("ws://%s:%d/", f.config.Host, f.config.Port)

var dialer *websocket.Dialer

clientConn, _, err := dialer.Dial(gremlinGrpcAddress, nil)
if err != nil {
    return err
}

f.client = clientConn

UPDATE:
Connecting to echo.websocket.org works, so somehow it is something in the Gremlin server.

我正在尝试连接到Gremlin,该端口应该在端口8182上运行( [INFO] GremlinServer $ 1 -频道从端口8182开始 code>) p>

当我连接到: ws://127.0.0.1:8182 code>时, 响应: p>

  2017/11/03 17:20:04错误:名称为'gremlin'的数据库在连接时出现错误:websocket:错误的握手。
   code>  pre> 
 
 

Gremlin服务器响应: p>

  [WARN] HttpGremlinEndpointHandler-无效请求-响应400错误请求且没有gremlin脚本 提供的
  code>  pre> 
 
 

我正在使用 Gorilla Websocket 转到连接中的a>: p>

  gremlinGrpcAddress:= fmt.Sprintf(“ ws://%s:%d /”,f.config.Host,f.config  .Port)
 
var拨号程序* websocket.Dialer 
 
clientConn,_,err:= dialer.Dial(gremlinGrpcAddress,nil)
if err!= nil {
 return err 
} 
 
f.client  = clientC  onn 
  code>  pre> 
 
 

更新: strong>
连接到 echo.websocket.org code>可行,因此可以 是Gremlin服务器中的东西。 p> div>

The answer lies in the config YAML file.

What is needed is the correct channelizer.

GOOD:

channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer

Connect to ws://localhost:8182/gremlin instead of ws://localhost:8182. There are several references to it in the Apache TinkerPop documentation and the go-gremlin README.