2009/8/4 卡卡 <karo...@gmail.com>:
这样做首先需要实现 SP_MsgBlock 的子类,比如实现一个 SP_FileMappingMsgBlock 。
在 handle 函数中,打开文件进行 mapping ,然后把 mapping 出来的 buffer 指针放到
SP_FileMappingMsgBlock 中。
这个也是当初设计 SP_MsgBlock 的一个原因。
2009/8/4 卡卡 <karo...@gmail.com>:
这里涉及到 登录 ,就是有权限控制。
另外,浏览目录和下载文件是否可以同时进行?
这里具体的业务处理还是比较复杂的。
spserver 的框架可以适应这些复杂的业务处理,但是真正要实现,中间还有很多的细节。
2009/8/11 卡卡 <karo...@gmail.com>:
> 想请lau兄确认一下我在如下场情下用spserver行不行?
> 做一个支持大约300人的文件服务器,客户端可以登陆,登出;客户端在线状态下,可以查看服务器上各文件目录,并可以随意选择文件下载;
}
int main (int argc, char **argv)
{
struct event signal_int;
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
/* Initalize the event library */
event_init();
/* Initalize one event */
event_set(&signal_int, SIGINT, EV_SIGNAL|EV_PERSIST,
signal_cb,
&signal_int);
event_add(&signal_int, NULL);
event_dispatch();
WSACleanup();
return (0);
}
后来我在signal.h文件中发现了raise接口,仔细一看,原来它就是做唤醒事件的接口;只要在退出时调用raise(SIGINT);(线程安
全
后面再考虑) ,然后signal_cb将所以注册的事件都删除就可以使工作线程正常退出了
通常要唤醒 select/poll/epoll ,一个常见的做法是产生一对 pipe ,
然后把读端注册到 select/poll/epoll 中,在 pipe 的 onread 事件中,设置退出的标志位。
应用程序保留着写端,当需要退出时,应用程序往 pipe 写一个字节,就可以保证唤醒事件循环。
2009/8/13 卡卡 <karo...@gmail.com>:
你上面问我:浏览目录和下载文件是否可以同时进行? 是的,我的应用中确有这种需要和操作,有什么要注意的吗?
2009/8/18 卡卡 <karo...@gmail.com>:
> 嗯,用pipe唤醒select的方法很经典;
>
> 你上面问我:浏览目录和下载文件是否可以同时进行? 是的,我的应用中确有这种需要和操作,有什么要注意的吗?
把控制连接和数据连接分开,不一定就要按 ftp 的模式。
只要你的 client 能够连接到 server ,那么每个 client 就能够创建到 server 的第二个连接。
On Aug 19, 5:06 pm, 卡卡 <karonh...@gmail.com> wrote:
> 我用ftp测过,多开了一套数据端口后,因为防火墙或者nat的原因,有时port模式通,pasv模式不通;有时pasv模式通,port不通,总之
> 问题变的复杂,罗嗦了,只用一个连接不能解决这个问题吗?
因为上面的原因,我倾向把应用协议弄复杂一点,也希望在一条连接上实现在多个功能,你说这个方法和我想的一样;
但是如果为数据传输专门创建第二条连接,那么在spserver的什么地方管理该连接呢,要不要为该任务再创建一个线程呢?