现在项目在开发阶段,web操作和数据库在两台机器上,web上的数据通过socket发送到数据库主机上,数据库主机用一个
已经连接了的数据库句柄操作SQL语句。现在只是在开发阶段,没有性能方面的考虑,但是一旦web开得太多、频繁操作,
而且对每条消息的处理数据量是比较大的,后面的很多web消息都滞后了,web的反应很慢,甚至超时。现在要增加两个措施:一个是实现线程池,为每条消息取出一个线程的资源执行操作;
一个是实现数据库连接池,每次调用线程池的一个线程,从连接池取出一个资源作为线程的参数,
避免多个线程竞争一个数据库句柄而操作失败。
补充:系统启动时,数据库主机自动连接数据库产生一个句柄,所有的SQL操作都使用同一个句柄。
现在比较急的是解决连接池问题,暂时为每条web消息临时生成一个线程,再从连接池取一个空闲资源执行SQL操作。现有的模板一小部分如下:
LRESULT CALLBACK IntfWndEvCallBack(IN HWND hWnd,IN SkUInt32 uMsg, IN WPARAM wParam,IN LPARAM lParam)
{ switch(WSAGETSELECTEVENT(lParam))
{
..... case FD_READ:
EvHandleReadEvent(wParam);
break;
..... default:
break;
}
}
该回调函数负责处理web消息,当判断为FD_READ消息时,实现从连接池中取空闲资源作为EvHandleReadEvent()的参数执行SQL操作。我现在用的是C语言开发,之前从未用过连接池,请各位大虾在上面的模板里帮我简单地实现,只求形成模板,我好套用就行了。请不吝指教!!! 工作需要,非诚勿扰!!!
已经连接了的数据库句柄操作SQL语句。现在只是在开发阶段,没有性能方面的考虑,但是一旦web开得太多、频繁操作,
而且对每条消息的处理数据量是比较大的,后面的很多web消息都滞后了,web的反应很慢,甚至超时。现在要增加两个措施:一个是实现线程池,为每条消息取出一个线程的资源执行操作;
一个是实现数据库连接池,每次调用线程池的一个线程,从连接池取出一个资源作为线程的参数,
避免多个线程竞争一个数据库句柄而操作失败。
补充:系统启动时,数据库主机自动连接数据库产生一个句柄,所有的SQL操作都使用同一个句柄。
现在比较急的是解决连接池问题,暂时为每条web消息临时生成一个线程,再从连接池取一个空闲资源执行SQL操作。现有的模板一小部分如下:
LRESULT CALLBACK IntfWndEvCallBack(IN HWND hWnd,IN SkUInt32 uMsg, IN WPARAM wParam,IN LPARAM lParam)
{ switch(WSAGETSELECTEVENT(lParam))
{
..... case FD_READ:
EvHandleReadEvent(wParam);
break;
..... default:
break;
}
}
该回调函数负责处理web消息,当判断为FD_READ消息时,实现从连接池中取空闲资源作为EvHandleReadEvent()的参数执行SQL操作。我现在用的是C语言开发,之前从未用过连接池,请各位大虾在上面的模板里帮我简单地实现,只求形成模板,我好套用就行了。请不吝指教!!! 工作需要,非诚勿扰!!!
当你用 数据库用持续连接时,用的是数据库连接池;
第三方。 web --> BT --> 数据库
假设有多个BT连接到一台数据库机器上,数据库接受连接后得到一个描述符sockfd,然后对其设置监听WSAAsyncSelect(sockfd, ‘某个窗口句柄’, ‘某个标识’, FD_READ|FD_CLOSE|FD_WRITE );这样一旦有数据来,就可以通过窗口函数得到特定的sockfd,然后再使用sockfd进行recv( ......)
到这里为止,就要开始使用连接池处理那些接受到的SQL操作了。我现在甚至不知道用C能不能实现数据库连接池,好像网上的说法是要用类实现。哪位高手好心指点指点吧,万分感激呀 !!!