我目前正在编写一个可以让客户端与一块硬件进行交互的服务器。对于感兴趣的读者来说,它是一种同时监测一组激光波长(并控制激光)的设备。服务器应该能够定期广播波长(浮动列表),并让客户端通过dll调用更改设备的设置。
我最初的想法是编写一个自定义协议来处理通信,但在考虑如何处理TCP碎片和数据编码后,我碰到了Twisted,如果我使用透视代理,看起来大部分工作已经完成直接从客户端共享数据和调用服务器方法。这个解决方案可能有点矫枉过正,但对我而言,这看起来很明显,您怎么看?
当我想到客户时,我主要关心的是arrose。基本上我需要两种类型的客户端,一种只显示波长(这应该是直接的),另一种可以更改设备设置并在更改时获得反馈。我的想法是创建一个兼容两者的单个客户端,但是考虑将它与我们以前的系统结合起来让我思考......第二个客户端应该从一个已经相当复杂的python框架控制,该框架控制着许多相对严格的独立硬件然后应在此顺序代码中调用时序要求和波长计的设置。现在问题是,如何将其与Twisted客户端混合使用?据我所知,Twisted不是线程安全的,所以我不能简单地生成一个运行反应器的新线程,然后从我的主线程中与它进行交互,是吗?
非常欢迎通过不同于Twisted的方式编写此服务器/客户端框架的任何建议!
由于
答案 0 :(得分:4)
您可以在专用线程中启动reactor,然后使用现有“顺序”代码中的blockingCallFromThread
向其发出调用。
另外,我建议使用AMP作为协议而不是PB,因为AMP更适合异构环境(see amp-protocol.net for independent protocol information),听起来你有大量的其他技术吗?可能想要与这个系统集成。
答案 1 :(得分:0)
您是否尝试过zeromq?
这是一个简化了套接字工作的库。它可以通过TCP运行并实现多种拓扑,例如发布者/订阅者(用于广播数据,例如激光读数)和请求/响应(可以用于控制方案)。
有多种语言的绑定,网站上有很多例子。而且,它的速度非常快。
好东西。