当我尝试运行服务器时,EventMachine::run我不断收到错误消息,说明该端口正在使用中.自从我使用命令在后台运行服务器以来,这开始了nohup.
我很确定我已经杀了我开始的过程:
ps,并将其杀死.它不再出现了.lsof -i :8081(8081是我运行它的端口),没有任何显示.我也认为可能是我缺乏root用户,所以尝试root作为无效.
我也重新启动了服务器.
如果还有什么我可以尝试,请告诉我.
注意:这是关于debian的.
我有一个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文件时,它不会打印任何数据/消息.
我正在尝试基于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(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秒?我尝试了另一个: …
不知道该怎么做才能具体解决这个问题,谷歌搜索并没有解决我的问题。当我尝试:
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) 为了不阻塞反应器,我想异步读取文件,但我发现使用EventMachine没有明显的方法.我尝试了几种不同的方法,但没有一种感觉正确:
EM.popen('cat some/file', FileReader)感觉真的很奇怪,但比上面的替代品更好.与LineAndTextProtocol它结合使用它可以很快地读取线条.EM.attach,但我还没有找到任何如何使用它的例子,我在邮件列表上发现的唯一一件事就是它被弃用了...EM.watch,我没有找到如何用于阅读文件的例子.如何读取EventMachine反应器循环中的文件?
在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出盒子.
我正在尝试用Goliath框架创建异步api.服务应该写入mysql,向RabbitMQ添加消息并接收响应.还应该有一个使用Rails构建的单独管理应用程序.我有几个问题:
有没有办法在Rails和Goliath之间有效地共享模型?使用Activerecord或任何其他orm与em有什么问题吗?是否有最佳实践,配置(连接池大小,驱动程序)或其他选项?我必须使用什么来接收来自AMQP的消息?是否可以更好地构建一个单独的eventmachine守护进程,或者我可以以某种方式使用Goliath的那个东西?谢谢你提前.
我正在使用EventMachine和Monetarily来启动e TCP服务器以及我的rails应用程序.这是从config/initializers/momentarily.rb.
我的问题是,当我运行rake任务时,它也会启动db:migrate.我只想在启动HTTP服务器时启动它.环境无济于事,因为服务器启动和rake任务都在开发环境下.有没有办法知道应用程序正在运行HTTP服务器而不是其他任何东西?请注意,不仅是rake任务,如果我运行rails控制台,EM也会启动,这对我的情况来说也是不可取的.
我有一台新的 m1 mac,但无法安装eventmachinegem,完整日志如下。
我尝试了这些解决方案:
\n同样的错误。
\n一些信息:
\n $ sw_vers\nProductName: macOS\nProductVersion: 12.2\nBuildVersion: 21D49\n\n $ bundle --version\nBundler version 2.1.4\nRun Code Online (Sandbox Code Playgroud)\n和错误:
\n $ gem install eventmachine -v \'1.2.7\' \nRun Code Online (Sandbox Code Playgroud)\nem.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)