让TCP服务器在Ruby中接收多行消息?

时间:2013-11-24 21:34:55

标签: ruby-on-rails ruby tcp hl7 tcpserver

我有一台机器向TCP / IP服务器发送多行消息。但是,当我使用任何简单的Ruby Server时,我只能接收第一行和最后一行(作为单独连接中的单独消息)。我已尝试使用TCPServerEventMachine以及我能找到的所有内容,但现在我被卡住了。

当一个快速的Python脚本显示整个消息时,机器肯定会发送整个消息。


供参考:


其中一个Ruby服务器 (在Rails项目中使用 - 在config / initializers中)

Thread.new do
    require 'rubygems'
    require 'thread'
    require 'socket'
    require 'ruby-hl7'

    PORT = 2100
    srv = TCPServer.new(PORT)
    puts "proxy_server listening on port: %i" % PORT

    loop {
        Thread.start(srv.accept) do |message|
            puts "Recieved message."
            puts message.read
        end
    }
end

Ruby服务器的输出

MSH|^~\&|^SureSignsVS||||20070302014355||ORU^R01^ORU_R01|CN212079910000000017|P|2.4|||||||||2.16.840.1.113883.9.2.1


OBX||NM|0002-4182^HR_Pulse^MDIL||87|0004-0aa0^bpm^MDIL|||||F||||||0002-4bb8^SpO2^MDIL|||||||2.16.840.1.113883.9.2.1


OBX||NM|0002-4182^HR_Pulse^MDIL||87|0004-0aa0^bpm^MDIL|||||F||||||0002-4bb8^SpO2^MDIL|||||||2.16.840.1.113883.9.2.1

(然后最后一行重复,但这是预期的,因为机器每60秒重复发送一次消息)


Python服务器

import socket

TCP_IP = '192.168.1.39'
TCP_PORT = 2100
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print "received data:", data
conn.close()

Python服务器的输出(预期和理想输出)

MSH|^~\&|^SureSignsVS||||20131124213151||ORU^R01^ORU_R01|CN2120792100000000Q8|P|2.4|||||||||2.16.840.1.113883.9.2.1
PID|||D1234567||^^
PV1|||^^|||||||||||||||A|
ORC|NW|||||||||||||||||CN21207991
OBR||||SPOTCHECK|||20131121190052|||
OBX||NM|0002-4bb8^SpO2^MDIL||100|0004-0220^%^MDIL|||||F
OBX||NM|0002-4a05^NBPs^MDIL||100|0004-0f20^mmHg^MDIL|||||F|||20131121185945
OBX||NM|0002-4a06^NBPd^MDIL||60|0004-0f20^mmHg^MDIL|||||F|||20131121185945
OBX||NM|0002-4a07^NBPm^MDIL||69|0004-0f20^mmHg^MDIL||L|||F|||20131121185945
OBX||NM|0002-4182^HR_Pulse^MDIL||86|0004-0aa0^bpm^MDIL|||||F||||||0002-4bb8^SpO2^MDIL

提前谢谢你。

0 个答案:

没有答案