2013-06-22 25 views
0

我有以下基于EventMachine的德胜客户端,但没有输出,当它连接到服务器:流套接字服务与EventMachine的Ruby的工作不

EventMachine.run do 
    conn = EventMachine::HttpRequest.new('http://localhost:10000') 
    http = conn.get 

    http.stream do |data| 
    puts data # THIS SHOULD BE OUTPUTTING SOMETHING 
    end 

    trap("INT") { puts 'INT'; http.close; EventMachine.stop } 
    trap("TERM") { puts 'TERM'; http.close; EventMachine.stop } 
end 

,服务:

module Simulation 
    class QuoteService < EM::Connection 
    def post_init 
     puts "CONNECTION ESTABLISHED" # THIS DOES OUTPUT 

     EventMachine.add_periodic_timer(1) do 
     puts "test data" # THIS DOES OUTPUT 
     send_data("test data") 
     end 
    end 
    end 
end 

EventMachine.run do 
    Signal.trap("INT") { EventMachine.stop } 
    Signal.trap("TERM") { EventMachine.stop } 

    EventMachine.start_server('0.0.0.0', 10000, Simulation::QuoteService) 
end 

我认为这项服务有些不正确。任何想法为什么客户端输出什么?

+0

嘿乍得..我面临着类似的问题,我的流叽叽喳喳api ..你找到解决方案吗? –

+0

嗨@RahulDess,不幸我不记得了。然而,我确实运行了一个WebSocket服务,你可以在这里看到它(https://github.com/chaddjohnson/trading_websocket_service/blob/master/config.ru)和[here](https:// github。 COM/chaddjohnson/trading_websocket_service /斑点/主/ LIB/web_socket_service.rb)。 –

回答

2

您的服务器和客户端都正常工作。例如,尝试与客户端连接以google.com:80为例,您将看到它的工作原理。

对于服务器只是做telnet localhost 10000,你也会在这里看到服务器开始打印出test data

但问题是您的服务器与您的客户端不兼容。您的客户端需要一个HTTP服务器,但您运行的服务器是一个简单的EM::Connection,它不提供HTTP客户端。

所以当客户端连接时,它期望一个标准的HTTP响应,但它所得到的全部是test data。所以代码的stream部分将永远不会被调用。

您需要运行HTTP服务器,或将客户端更改为使用EM::Connection而不是HttpRequest。即客户端和服务器都需要使用相同的协议。