您好我需要构建一个类似于经纪人的IO服务器。
Web服务器与服务器(代理)通话以发出请求,例如可以控制的设备。例如。嵌入式系统..通过rs232或usb和以太网连接到服务器。
例如,网络服务器与设备A通话并要求执行X.
服务器(代理)也与设备通信。当设备启动时,它会将自己注册到代理。我是设备b,我的名字是k,我准备接受命令。
我正在使用debian linux,我需要知道如何才能实现这一点。
这是否需要创建内核设备?
非常感谢。
编辑:我刚刚在这里阅读了有关守护程序编程的http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html。我在这里复制并粘贴了代码。
我写了关于我将改变的代码部分的评论。
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
int main(void) { // change this to "int main(int argc,char *argv[])"
/* Our process ID and Session ID */
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* Open any logs here */
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log the failure */
exit(EXIT_FAILURE);
}
/* Change the current working directory */
if ((chdir("/")) < 0) {
/* Log the failure */
exit(EXIT_FAILURE);
}
/* Close out the standard file descriptors */
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
/* Daemon-specific initialization goes here */
/* The Big Loop */
while (1) {
/* Do some task here ... */ // Device detect here. eg(/dev/ttyS0-usb-serial)
sleep(30); /* wait 30 seconds */ // Instead of using 30 seconds here I plan on removing it and changing it with events like wake up when new device is plugged.
}
exit(EXIT_SUCCESS);
}
此代码
int main(void)
更改为
int main(int argc,char *argv[])
所以我可以从debian的命令行发送命令。
我将在循环中添加此代码 - 大循环
if(strcmp(argv[1], "status")==0){
//check status of devices here
}
if(new Device plugged){ // not real code. just to get the idea.
// register the device type and name.
}
然后在php中使用shell_exec()。
<?php $output = shell_exec('daemon status'); echo "$output"; die;
php中的示例输出将是这样的:
Device Name | Status
/dev/ttyS0 = online
/dev/sample = offline
我的想法是否可行?。
答案 0 :(得分:0)
RS232,usb和以太网连接设备一般不需要新的驱动程序。
你只需要创建一个与设备对话的守护程序和在Web服务器上执行的cgi,它通过IPC与守护进程通信并交换命令和结果。您可以尝试使用更简单的设备,即从cgi读取设备,但在这种情况下,您可能会遇到高延迟,并且不会对设备输入做出反应。
话虽如此,问题的表述过于笼统,无法提出更多建议。这些设备有什么作用?您想使用哪种语言?