【问题标题】:How to use Websocket (socket.io) with Ruby?如何在 Ruby 中使用 Websocket (socket.io)?
【发布时间】:2021-08-04 23:39:36
【问题描述】:

我需要在我们的 Rail 项目中实现 WebSocket 同步。 MetaApi 项目使用 Socket.Io 作为默认支持。只找到了 2 个项目 (websocket-client-simple) 并且使用原生 socket.io 已过时。我们尝试使用Faye-Websocketsocketcluster-client-ruby 来实现这一点,但没有成功。

Code Example

import ioClient from 'socket.io-client';

const socket = ioClient('https://mt-client-api-v1.agiliumtrade.agiliumtrade.ai', {
    path: '/ws',
    reconnection: false,
    query: {
        'auth-token': 'token'
    }
});

const request = {
  accountId: '865d3a4d-3803-486d-bdf3-a85679d9fad2',
  type: 'subscribe',
  requestId: '57bfbc9f-108d-4131-a300-5f7d9e69c11b'
};

socket.on('connect', () => {
  socket.emit('request', request);
});

socket.on('synchronization', data => {
  console.log(data);
  if (data.type === 'authenticated') {
    console.log('authenticated event received, you can send synchronize now');
  }
});

socket.on('processingError', err => {
  console.error(err);
});

【问题讨论】:

  • 您介意添加一些有关您看到的错误的详细信息吗?
  • @Breno Perucchi 为什么你不能使用 Actioncable 或 cableready?

标签: ruby-on-rails websocket socket.io faye


【解决方案1】:

Socket.io 协议比简单的 websocket 连接要复杂一些,后者只是使用的一种传输方式,请参阅description in official repository。 Websocket 仅在初始 http 握手后使用,因此您需要一个完整的客户端。

我首先尝试使用浏览器中的 js 客户端存根来使用事件,以确保 api 按您的预期工作并确定使用和兼容的 socket.io 版本(当前是 v4,陈旧的 ruby​​ 客户端大多是对于 v1)。并且您可以在浏览器开发者工具中窥探协议。

一旦你有一个成功的会话示例并阅读了上面的协议规范 - 制作一个最小的客户端会更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多