标签: eventmachine

EventMachine:"`start_tcp_server':没有接受者(端口正在使用或需要root权限)"

当我尝试运行服务器时,EventMachine::run我不断收到错误消息,说明该端口正在使用中.自从我使用命令在后台运行服务器以来,这开始了nohup.

我很确定我已经杀了我开始的过程:

  • 我找到了红宝石的过程ps,并将其杀死.它不再出现了.
  • 我也跑了lsof -i :8081(8081是我运行它的端口),没有任何显示.
  • 最后,我已经多次更改了ruby程序中的端口以遮挡端口,但仍然出现错误!

我也认为可能是我缺乏root用户,所以尝试root作为无效.

我也重新启动了服务器.

如果还有什么我可以尝试,请告诉我.

注意:这是关于debian的.

ruby port tcp eventmachine

16
推荐指数
3
解决办法
2万
查看次数

Rails如何解析文本/事件流?

我有一个API网址,它是一个内容类型为的数据流:text/event-stream.

怎么可能听流?喜欢在每个事件中加载来打印数据?我曾尝试使用ruby libaryem-eventsource

我的test.rb档案:

require "em-eventsource"
EM.run do
  source = EventMachine::EventSource.new("my_api_url_goes_here")
  source.message do |message|
    puts "new message #{message}"
  end
  source.start 
end
Run Code Online (Sandbox Code Playgroud)

当我访问我的api url时,我可以看到每秒更新的数据.但是当我在终端中运行ruby文件时,它不会打印任何数据/消息.

ruby ruby-on-rails eventmachine ruby-on-rails-4

16
推荐指数
1
解决办法
677
查看次数

如果运行tls_start,EventMachine是否会在close_connection上发出close_notify?

我正在尝试基于EventMachine编写一个简单的FTPS服务器.

控制插座正常工作.使用数据套接字进行数据传输时,似乎一切正常(TLS握手成功完成并收到数据),但后来收到错误消息.这是我在Filezilla中得到的:

Command:    LIST
Response:   150 Opening ASCII mode data connection for file list
Trace:  CFtpControlSocket::TransferParseResponse()
Trace:    code = 1
Trace:    state = 4
Trace:  CFtpControlSocket::SendNextCommand()
Trace:  CFtpControlSocket::TransferSend()
Trace:    state = 5
Trace:  CTransferSocket::OnConnect
Trace:  CTlsSocket::Handshake()
Trace:  gnutls_session_get_data on primary socket failed: -51
Trace:  CTlsSocket::ContinueHandshake()
Trace:  CTlsSocket::OnSend()
Trace:  CTlsSocket::OnSend()
Trace:  CTlsSocket::OnRead()
Trace:  CTlsSocket::ContinueHandshake()
Trace:  CTlsSocket::OnRead()
Trace:  CTlsSocket::ContinueHandshake()
Trace:  Handshake successful
Trace:  Cipher: AES-256-CBC, MAC: SHA1
Trace:  CTlsSocket::OnRead()
Trace:  CTransferSocket::OnConnect
Trace:  CTransferSocket::OnReceive(), m_transferMode=0
Listing:    -rwxrwxrwx 1 owner  group         1011 Dec 12 …
Run Code Online (Sandbox Code Playgroud)

ruby ssl ftps eventmachine

15
推荐指数
1
解决办法
547
查看次数

Ruby并发:非阻塞I/O与线程

我正在玩Ruby(1.9.3-p0)中的并发,并创建了一个非常简单,I/O密集的代理任务.首先,我尝试了非阻塞方法:

require 'rack'
require 'rack/fiber_pool'
require 'em-http'
require 'em-synchrony'
require 'em-synchrony/em-http'

proxy = lambda {|*|
  result = EM::Synchrony.sync EventMachine::HttpRequest.new('http://google.com').get
  [200, {}, [result.response]]
}

use Rack::FiberPool, :size => 1000
run proxy

=begin
$ thin -p 3000 -e production -R rack-synchrony.ru start
>> Thin web server (v1.3.1 codename Triple Espresso)

$ ab -c100 -n100 http://localhost:3000/
Concurrency Level:      100
Time taken for tests:   5.602 seconds
HTML transferred:       21900 bytes
Requests per second:    17.85 [#/sec] (mean)
Time per request:       5602.174 [ms] (mean)
=end
Run Code Online (Sandbox Code Playgroud)

嗯,我以为我一定做错了.对于我们主要等待I/O的任务,平均请求时间为5.6秒?我尝试了另一个: …

ruby multithreading asynchronous eventmachine

13
推荐指数
1
解决办法
2566
查看次数

向本地主机提供 Jekyll 服务时出现问题,eventmachine 1.2.7 安装时出现错误

不知道该怎么做才能具体解决这个问题,谷歌搜索并没有解决我的问题。当我尝试:

bundle exec jekyll serve

我被告知:

Could not find eventmachine-1.2.7 in any of the sources
Run `bundle install` to install missing gems.

Run Code Online (Sandbox Code Playgroud)

然后我:

bundle install

只是为了得到这个:

Installing eventmachine 1.2.7 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /private/var/folders/7f/2c2swwc1153899dmr8781_x40000gn/T/bundler20201130-34411-1lzt2fceventmachine-1.2.7/gems/eventmachine-1.2.7/ext
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r
./siteconf20201130-34411-pd54nh.rb extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/include/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.

extconf failed, exit code 1 …
Run Code Online (Sandbox Code Playgroud)

ruby bundle rubygems eventmachine jekyll

13
推荐指数
2
解决办法
7967
查看次数

在基于EventMachine的应用程序中读取文件的最佳方法是什么?

为了不阻塞反应器,我想异步读取文件,但我发现使用EventMachine没有明显的方法.我尝试了几种不同的方法,但没有一种感觉正确:

  • 只是阅读文件,它会阻止反应堆,但到底是什么,它不是那么慢(除非它是一个大文件,然后它肯定是).
  • 打开文件进行读取,并在每个刻度线上读取一个块(但读取多少?太多,它会阻塞反应堆,太少,读取速度会慢于必要).
  • EM.popen('cat some/file', FileReader)感觉真的很奇怪,但比上面的替代品更好.与LineAndTextProtocol它结合使用它可以很快地读取线条.
  • EM.attach,但我还没有找到任何如何使用它的例子,我在邮件列表上发现的唯一一件事就是它被弃用了...
  • EM.watch,我没有找到如何用于阅读文件的例子.

如何读取EventMachine反应器循环中的文件?

ruby asynchronous eventmachine

12
推荐指数
1
解决办法
3294
查看次数

为什么rails不能完全支持将编写好的代码写出框外

在Node.js问世之后,普及编程就是一件事.但是,Ruby确实有EventMachine支持编写事件代码.

在rails中支持事件的要求是:
1.运行反应器的偶数服务器(薄,彩虹)
2.光纤(Ruby 1.9.3),以便更容易编写事件代码,否则我们可以使用线程.
3.所有宝石都会事件化(例如mysql2).

Nodejs展示了即兴编程的明显优势.那么为什么rails社区不采用eventmachine?我认为rails不能完全移植到eventmachine的原因之一是因为依赖于可能没有被触发的底层gem.但有人知道是否有计划朝这个方向迈进?

Rails可以做的NodeJS做什么,但开始的NodeJS出通过对所有库厂商崇尚事件触发程序,所以按照惯例,大多数的依赖,你在添加节点的package.json,你知道,这将是事件触发,将与工作的NodeJS出盒子.

eventmachine node.js ruby-on-rails-3

12
推荐指数
1
解决办法
532
查看次数

Rails应用程序和goliath api和数据库/模型共享

我正在尝试用Goliath框架创建异步api.服务应该写入mysql,向RabbitMQ添加消息并接收响应.还应该有一个使用Rails构建的单独管理应用程序.我有几个问题:

有没有办法在Rails和Goliath之间有效地共享模型?使用Activerecord或任何其他orm与em有什么问题吗?是否有最佳实践,配置(连接池大小,驱动程序)或其他选项?我必须使用什么来接收来自AMQP的消息?是否可以更好地构建一个单独的eventmachine守护进程,或者我可以以某种方式使用Goliath的那个东西?谢谢你提前.

ruby ruby-on-rails eventmachine goliath

11
推荐指数
1
解决办法
1338
查看次数

检测应用程序是否作为HTTP服务器启动(rake task,rconsole等)

我正在使用EventMachineMonetarily来启动e TCP服务器以及我的rails应用程序.这是从config/initializers/momentarily.rb.

我的问题是,当我运行rake任务时,它也会启动db:migrate.我只想在启动HTTP服务器时启动它.环境无济于事,因为服务器启动和rake任务都在开发环境下.有没有办法知道应用程序正在运行HTTP服务器而不是其他任何东西?请注意,不仅是rake任务,如果我运行rails控制台,EM也会启动,这对我的情况来说也是不可取的.

ruby rake ruby-on-rails eventmachine

11
推荐指数
3
解决办法
2493
查看次数

我无法在 mac m1 上安装 eventmachine gem

我有一台新的 m1 mac,但无法安装eventmachinegem,完整日志如下。

\n

我尝试了这些解决方案:

\n\n

同样的错误。

\n

一些信息:

\n
   $ sw_vers\nProductName:    macOS\nProductVersion: 12.2\nBuildVersion:   21D49\n\n   $ bundle --version\nBundler version 2.1.4\n
Run Code Online (Sandbox Code Playgroud)\n

和错误:

\n
   $ gem install eventmachine -v \'1.2.7\'                                                    \n
Run Code Online (Sandbox Code Playgroud)\n
em.cpp:706:13: error: use of undeclared identifier \'rb_thread_select\'; did you mean \'rb_thread_fd_select\'?\n        if ((ret = rb_thread_select(kqfd + 1, &fdreads, NULL, NULL, &tv)) < 1) {\n …
Run Code Online (Sandbox Code Playgroud)

ruby rubygems eventmachine apple-m1

10
推荐指数
2
解决办法
2971
查看次数