标签: em-websocket

在薄薄的导轨上安全地停止em-websocket

我有一个rails应用程序我在瘦服务器上运行以利用EventMachine运行循环.问题是我希望能够包含em-websocket来处理来自ws的信息,并在不停止EM运行循环的情况下停止并启动websocket.这就是我启动websocket的方式.

EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
  ws.onopen { }
  ws.onclose { }
  ws.onmessage { |msg| }
end
Run Code Online (Sandbox Code Playgroud)

问题出在启动/停止代码中.来自em-websocket的文档

#Start WebSocket
def self.start(options, &blk)
  EM.epoll
  EM.run do

    trap("TERM") { stop }
    trap("INT")  { stop }

    EventMachine::start_server(options[:host], options[:port],
      EventMachine::WebSocket::Connection, options) do |c|
      blk.call(c)
    end
  end
end


#Stop WebSocket
def self.stop
  puts "Terminating WebSocket Server"
  EventMachine.stop
end
Run Code Online (Sandbox Code Playgroud)

问题是内部的em-websocket代码不跟踪来自EM:start_server的签名,以便能够调用EventMachine :: stop_server(签名)来关闭它.有没有办法可以在不修改em-websocket的情况下覆盖这些函数,这样我就可以安全地启动/停止这些websockets?我想它的表现更像是标准的Eventmachine服务器.

ruby-on-rails thin eventmachine em-websocket

7
推荐指数
1
解决办法
950
查看次数

如何通过Rails实现基于websocket的推送服务?

我正在构建像WhatsApp这样的消息传递应用程序.我的目标是通过Rails只暴露REST API,并通过websockets将"推送通知"暴露给连接的客户端.因此,客户端仅使用REST API与服务器通信.只有服务器通过websocket发送数据.客户端只能从中接收数据.

目前我已经构建了一个eventmachine服务器,用于监听websocket连接和Unix域套接字连接.当客户端在REST API上执行请求时,Rails会连接到Unix域套接字,以告知事件处理器需要通过websocket通知哪些连接的客户端.

我关心的是它在生产中的表现(我的服务器运行Apache Passenger).所以我正在寻找一些解决我问题的项目.我看了看Faye,但我无法理解如何强制它从外部进程(在执行请求时可能是rails)向连接的客户端发送通知.有任何想法吗?

ipc ruby-on-rails websocket faye em-websocket

7
推荐指数
1
解决办法
1263
查看次数

大量的 WebSocket 连接

我正在编写一个应用程序来跟踪在某个任务的用户之间推送的内容。我正在考虑使用 WebSockets 发送新内容,因为它们可供当前使用该应用程序执行该给定任务的所有用户使用。

我在 Rails 上写这篇文章,客户端应用程序在 iOS 上(可能也会在 Android 上)。恐怕这个 WebSocket 解决方案可能无法很好地扩展。在决定使用 WebSockets 还是使用某种轮询解决方案时,我正在寻求一些建议和需要考虑的事项。

Ruby on Rails 服务器(如 Heroku)是否支持同时打开大量 WebSocket?为了争论,让我们说一百万个连接。任何人都可以向我提供此类东西的任何材料?

如果我以这种方式构建它,在服务器托管上会花费更多吗?

甚至可以同时维护数百万个 WebSockets 吗?我觉得这可能不是最好的设计决定。

这是我第一次尝试正确的 Rails API。任何意见是极大的赞赏。谢谢。

html ruby ruby-on-rails websocket em-websocket

5
推荐指数
1
解决办法
3051
查看次数

与Ruby和EM :: WebSocket :: Server的WebSocket握手

我正在尝试使用JavaScript在我的Rails应用程序中创建一个简单的WebSocket连接.我得到以下内容:

与'ws:// localhost:4000 /'的WebSocket连接失败:WebSocket握手期间出错:'Sec-WebSocket-Accept'标头丢失

我究竟做错了什么?这是我的代码:

JavaScript的:

var socket = new WebSocket('ws://localhost:4000');

socket.onopen = function() {
  var handshake =
    "GET / HTTP/1.1\n" +
    "Host: localhost\n" +
    "Upgrade: websocket\n" +
    "Connection: Upgrade\n" +
    "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\n" +
    "Sec-WebSocket-Protocol: quote\n" +
    "Sec-WebSocket-Version: 13\n" +
    "Origin: http://localhost\n";

  socket.send(handshake);
};

socket.onmessage = function(data) {
  console.log(data);
};
Run Code Online (Sandbox Code Playgroud)

红宝石:

require 'rubygems'
require 'em-websocket-server'

module QuoteService
  class WebSocket < EventMachine::WebSocket::Server
    def on_connect
      handshake_response =  "HTTP/1.1 101 Switching Protocols\n"
      handshake_response << "Upgrade: websocket\n"
      handshake_response << "Connection: Upgrade\n"
      handshake_response << "Sec-WebSocket-Accept: …
Run Code Online (Sandbox Code Playgroud)

javascript ruby websocket em-websocket

2
推荐指数
1
解决办法
3740
查看次数