我正在编写一个C守护程序,我的Web应用程序将使用该守护程序作为与FTP服务器通信的代理。我的Web应用程序使用户能够通过AJAX连接和与FTP站点交互。我需要一个C守护进程的原因是我无法通过AJAX调用保持FTP连接存活。
我的Web应用程序需要能够告诉我的守护进程为给定的用户帐户执行列表,获取,放置,删除,移动和重命名文件到给定的FTP服务器。因此,当我的应用程序与守护进程通信时,它需要通过我定义的一些协议传递以下内容:1)操作,2)连接ID,3)用户ID,4)任何其他操作参数(注意:连接信息存储在一个数据库,所以守护进程也会与之交谈。
这就是我需要守护进程做的事情。我想我的网络应用程序和守护进程之间的通信将通过TCP套接字进行,但我不确切知道我将发送什么数据。我需要一个例子。例如,我应该通过socket将这样的东西发送到守护进程吗?
action=list&connection_id=345&user_id=12345&path=/some/path
或者我应该在字节级做一些硬核,像这样吗?
+-----------------+-------------------------+-------------------+-----------------------------------+
| 1 byte (action) | 4 bytes (connection id) | 4 bytes (user id) | 255 bytes (additional parameters) |
+-----------------+-------------------------+-------------------+-----------------------------------+
| 0x000001 | 345 | 12345 | /some/path |
+-----------------+-------------------------+-------------------+-----------------------------------+
套接字上的这种通信通常是什么样的?
答案 0 :(得分:1)
二进制协议更容易处理。只是在消息前面加上长度(或者只是它的变量部分) - TCP不知道你的应用程序级消息边界。请注意数字endianness。
另一方面,基于文本的协议更灵活。
另外,看看Google Protocol Buffers - 可能非常有用,但我不确定是否支持ajax。
答案 1 :(得分:1)
实际上它主要是关于编码和解析最简单的格式,这就是为什么不是用我自己的协议重新发明轮子,我个人会使用现有的远程过程调用解决方案。我的第二个选择是位域,因为它很容易打包进出结构。
答案 2 :(得分:1)
您不一定需要实现自己的协议。您是否考虑过使用XML-RPC之类的东西,甚至只是简单的XML?有C库可以让你解析它。