使用ZeroMQ流中的内容作为网页

时间:2017-11-13 14:09:43

标签: python zeromq

我在Python中有这个代码。

有了这个,我可以将ZeroMQ流的内容输出到文件中。只有每10秒写一个文件似乎并不真正有用,并且会花费很多性能。

现在我想在网页中显示内容。我见过PyBottle存在,在Python中创建了一个Web服务器。

如何在代码中集成PyBottle,以便输出流的最新消息?我在 PyBottle -loop中考虑了while的代码。

但是,我(不必要地)创建一个新的Web服务器实例吗?

我该如何处理?

PyBottle的示例:

from bottle import route, run, template

@route( '/hello/<name>' )
def index( name ):
    return template( '<b>Hello {{name}}</b>!', name = name )

run( host = 'localhost', port = 8080 )

我的Python代码:

#!/usr/bin/env python2

from gzip       import GzipFile
from cStringIO  import StringIO
from subprocess import call
pass;           import zmq

context = zmq.Context()

subscriber = context.socket( zmq.XSUB )
subscriber.connect( "tcp://pubsub.*******.nl:7664" )
subscriber.send( chr( 0x01 )             # { 0x01: ZMQ_XSUB.subscribe,
               + "/RIG/VehiclePositions" #   0x00: ZMQ_XSUB.unsubscribe
                 )                       #   }
while   True:

        multipart =  subscriber.recv_multipart()
        address   =  multipart[0]
        contents  = ''.join(multipart[1:])
        contents  =  GzipFile( '', 'r', 0, StringIO( contents ) ).read()
        filename  = "tmp/treinpos.txt"
        file      =  open( filename, "w" )
        file.write( contents )
        file.close()

subscriber.close()
context.term()

1 个答案:

答案 0 :(得分:0)

产生重复性成本是设计实践不良的标志:

右,
而是将PyBottle或其他任何Web服务框架扩展为仅实例化一次(可以稍后使用负载平衡工作程序,以进一步增加体系结构的性能范围),同时它还创建自己的ZeroMQ Context() -IO-datapump引擎。这使得Web服务方法能够与其他内容生成代理进行通信,并预先构建实际的动态内容,既可以是先验的,也可以是即时的。

您的架构的其余部分将变得更智能,更轻量级,因为您的所有交互都变为基于信令/消息传递,从而避免文件系统的文件损坏。

可用的其他ZeroMQ性能技巧

  • 可以通过 .setsockopt() zmq.CONFLATE ,通过zmq.IMMEDIATE远程终端I / O成本+效果进行微调和其他ISO / OSI-L3层参数
  • 可以通过连接白名单+尺寸上限来强化网络服务代码

以及许多进一步的性能技巧,甚至可以从现实世界 生态系统中的受限制的代码执行环境中挤出最大性能。