0

您好我需要构建一个像代理一样的 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 的命令行发送命令。

我将在 while 循环中添加这段代码 - 大循环

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.ini 中使用 shell_exec()。

<?php $output = shell_exec('daemon status'); echo "$output"; die;

php 中的示例输出将是这样的:

Device Name |  Status

/dev/ttyS0  =  online
/dev/sample =  offline

我想的可行吗?

4

1 回答 1

0

RS232、USB 和以太网连接的设备通常不需要新的驱动程序。

您只需要创建一个与设备对话的守护程序和一个在 Web 服务器上执行的 cgi,它通过 IPC 与守护程序对话并交换命令和结果。您可以尝试使用更简单的设备,即从 cgi 读取设备,但在这种情况下,您可能会面临高延迟并且不会对设备输入做出反应的风险。

话虽如此,问题的表述过于笼统,无法给出更多建议。这些设备有什么作用?您想使用哪些语言?

于 2012-09-25T14:55:45.337 回答