You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7连接Sorare WSS仅收Ping,GraphQL订阅无返回问题排查

排查Sorare WebSocket订阅无数据返回问题

问题背景

在Rails项目中尝试连接Sorare API的WSS服务,发送GraphQL订阅查询,先后使用faye-websocket、websocket-client-simple、action_cable_client等gem,也试过Channel文件中的JS方案,但均遇到同一问题:仅收到欢迎消息后持续收到Ping,无任何订阅数据返回。

相关代码与配置

action_cable_client示例代码

require 'json'
require 'action_cable_client'

EventMachine.run do
  uri = "wss://ws.sorare.com/cable"
  params = { channel: 'GraphqlChannel' }
  header = { "Authorization" => "Bearer #{ENV['S_TKN']}" }
  client = ActionCableClient.new(uri, params, true, header)

  query = <<-GRAPHQL
  subscription {
    aCardWasUpdated(rarities: [rare, super_rare, unique]) {
      slug
    }
  }
  GRAPHQL

  data = { query: query, variables: {}, action: 'execute' }
  message = { command: 'subscribe', identifier: {channel: 'GraphqlChannel'}, data: data }.to_json

  # called whenever a welcome message is received from the server
  client.connected { puts 'WebSocket connection successful.' }
 
  # Sends a message to the sever, with the 'action', 'speak'
  client.perform('speak', { message: message })

  # called whenever a message is received from the server
  client.received do | message |
    puts message
  end

  client.pinged do |_data|
    puts "ping"
  end
end

Rails配置文件

config.action_cable.disable_request_forgery_protection = true
  config.action_cable.url = 'wss://ws.sorare.com/cable'
  config.action_cable.allowed_request_origins = [ 'wss://ws.sorare.com/cable' , %r{http://sorare.*} ]

排查与解决建议

  • 订阅消息格式错误:当前用client.perform('speak', { message: message })发送了嵌套格式的消息,但Action Cable的perform方法会自动封装command、identifier和data结构,无需手动序列化整个消息。正确写法应为:

    # 构造execute动作所需数据
    data = { query: query, variables: {} }
    # 直接调用perform指定动作和数据
    client.perform('execute', data)
    
  • 身份验证有效性:确认ENV['S_TKN']中的Token未过期,且拥有订阅aCardWasUpdated事件的权限。可先用Sorare REST API测试Token能否正常获取数据,排除权限或Token失效问题。

  • 订阅事件触发条件:aCardWasUpdated仅在符合条件的卡片(rare/super_rare/unique)发生更新时推送数据,可能当前无对应更新事件。可更换为更频繁触发的订阅(如aTransferWasCompleted)测试是否能收到数据。

  • 客户端初始化优化:初始化ActionCableClient时,第二个参数直接传入频道标识符即可,无需额外params包裹,可简化为:

    client = ActionCableClient.new(uri, { channel: 'GraphqlChannel' }, true, header)
    
  • 无效配置清理:提供的Rails配置是针对本地Action Cable服务的,对连接外部Sorare WebSocket服务无作用,可直接删除避免混淆。


内容的提问来源于stack exchange,提问作者Nicolas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:15:08