其他分享
首页 > 其他分享> > 嵌入式设备的服务器体系结构

嵌入式设备的服务器体系结构

作者:互联网

我正在为嵌入式ARM平台开发服务器应用程序. ARM板连接到系统将持续轮询的各种数字IO,ADC等.它当前正在运行Linux内核,其硬件接口已开发为驱动程序.想法是拥有一个客户端应用程序,该应用程序可以连接到嵌入式设备并在更新时接收感官数据,并向该设备发出命令(关闭传感器1,重新启动传感器2等).假设通过典型的ioctl完成对感觉设备的访问.

现在,我的问题与在嵌入式设备上运行的此服务器应用程序的设计/体系结构有关.最初,我想使用libeventlibev之类的轻量级C事件处理库.应用程序将对传感器轮询事件进行优先级排序(然后在轮询完成后将信息发送给客户端),并在接收到客户端命令时(通过典型的TCP套接字)处理客户端命令.服务器通常只有一个连接,但最多可以有十二个左右,但没有几千个连接.这是设计类似东西的最佳方法吗?在我列出的两个事件处理库中,有一个对嵌入式应用程序更好,还是还有其他选择?

正在考虑的另一种方法是多线程应用程序,其中传感器轮询在优先级/阻塞线程中完成,该线程读取传感数据,并且每个客户端连接在单独的线程中处理.感官数据将更新为某种缓冲区/数据结构,并且连接线程会处理将数据发送到客户端并处理客户端命令(我想您仍然需要在这些线程中进行某种事件循环来监视传入的命令) .是否使用任何库或典型软件包来帮助设计这样的应用程序,或者这是您必须从头开始的事情?

您将如何设计我要完成的工作?

解决方法:

我将使用unix域套接字-并自己编写该库,因为该应用程序与linux绑定,所以看不到使用libvent的任何优势,并且libevent也可用于数百个连接.您可以使用守护程序中的单个线程来完成所有尝试做的事情.吻.

您不需要专用的主线程来处理优先级队列,只需编写线程即可,以便它始终先处理高优先级事件.

就库而言,您可能会受益于Google’s protocol buffers(用于序列化并表示您的协议)-但是,它仅具有对C的一流支持,并且有线(串行化)格式对数字数据进行了一些简单的位转换.我怀疑这会增加任何严重的开销.但是,替代方法是ASN.1(asn1c).

标签:arm,embedded,client-server,c-3,linux
来源: https://codeday.me/bug/20191024/1918975.html