TcpServer 使用简介
1、简介
1) Poco 的 TcpServer 是一个多线程的 Tcp 服务器。
服务器使用 ServerSocket(Poco 的一个用于初始化服务器的socket的类) 来接收链接。ServerSocket 在被传给 TcpServer 之前必须是处于监听状态。
2) TcpServer 为到来的链接维护一个队列。队列是多大呢?默认情况下队列的大小是和线程池的大小一样。
3) 当然你也可以去设定 TcpServer 的各个参数来适合自己的实际环境。通过 Poco::Net::TCPServerParams ;
TcpServerParam 类 可以设定最大队列,最大线程数,设定线程空闲时间,设定 TcpServer 的线程优先级(通常高点比较好)。需要注意的是 TcpServerParam 类只能通过指针使用因为它的析构是 protocted。
4) 不定数量的线程从队列获取链接,并去处理链接。工作的线程数是自动调整的。依赖于在队列里等待的链接的个数。
通过限制在队列里的 connection 数量,是可以防止服务器被大量的数据淹没。到来的的 connection 超过队列的限制,会被立即关闭。
2、TcpServer 的使用
1) 创建自己的线程用于接收链接请求,并且把建立的 connection 放进队列。
2) 使用 TcpServerConnection 类来响应一个链接。用户必须创建一个 TcpServerConnection 的子类和一个 TcpServerConnectionFavtory 的子类。
TcpServer 的构造函数里必须传入这个 TcpServerConnectionFactory 的子类。
这里 TcpServerConnectionFactory 的子类是 CZhiTcpServer
在TcpServer 构造的适合传入一个 TcpServerConnectionFactory 的子类对象。你也可以传入 TcpServerParam 对象来指定 TcpServer 对象的其他特性。
在 TcpServerConnectionFactory 的子类里必须重载 virtual TCPServerConnection* createConnection(const StreamSocket& socket) = 0; 在 createConnection() 方法里 return 一个用户定义的处理请求的 TcpServerConnection 的子类。
3、完整代码:
#include <Poco/Net/ServerSocket.h>
#include <Poco/Net/TCPServer.h>
#include <Poco/Net/TCPServerConnectionFactory.h>
#include <Poco/Net/TCPServerConnection.h>
#include <Poco/Net/StreamSocket.h>
#include <Poco/Timespan.h> #include <iostream>
#include <sstream> using Poco::Net::TCPServerConnectionFactory;
using Poco::Net::TCPServerConnection;//构造函数需要 StreamSocket
using Poco::Net::StreamSocket; class CZhiTcpServerConnection : public TCPServerConnection
{
public:
CZhiTcpServerConnection( const StreamSocket& s ):
TCPServerConnection( s )
{ } void run( void ); }; /**
* @brief CZhiTcpServerConnection::run 处理链接请求的主函数
*/
void CZhiTcpServerConnection::run( void )
{
try
{
std::cout << "hello world" << std::endl;
char buf[ ] = { }; socket().receiveBytes( buf, );
std::stringstream ssbuf( buf ); std::cout << "recvData: " << ssbuf.str() << std::endl;
socket().sendBytes( ssbuf.str().data(),ssbuf.str().length() );
}
catch( std::exception& e )
{
std::cout << e.what() << std::endl;
}
} class CZhiTcpServer : public TCPServerConnectionFactory
{
public: inline TCPServerConnection* createConnection(const StreamSocket &socket)
{
return new CZhiTcpServerConnection( socket );
} }; int main()
{
Poco::Net::ServerSocket serverSocket( );
Poco::Timespan timeout( , );
serverSocket.setReceiveTimeout( timeout );
Poco::Net::TCPServerParams::Ptr param = new Poco::Net::TCPServerParams;
//设定队列的最大长度。
param->setMaxQueued( );
//设定 TcpServer 最大线程的个数。
param->setMaxThreads( );
Poco::Net::TCPServer server( new CZhiTcpServer, serverSocket );
server.start();
while( )
{
sleep( );
}
server.stop( );
}
TcpServer 使用简介的更多相关文章
- Android查缺补漏(IPC篇)-- 进程间通讯之Socket简介及示例
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8425736.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...
- socketserver源码简介
一.socketserver流程简介 +------------+ | BaseServer | +------------+ | v +-----------+ +----------------- ...
- [转帖]socks5 协议简介
socks5 协议简介 http://zhihan.me/network/2017/09/24/socks5-protocol/ 什么是socks5 或许你没听说过socks5,但你一定听说过Shad ...
- socketserver 模块简介
一.socketserver模块简介 socketserver模块简化了网络编程,模块下有五个服务类:BaseServer.TCPServer.UDPServer.UnixStreamServer.U ...
- Airtest安装与简介
一:简介 什么是Airtest 网易的airtest其实是个测试套件,由Airtest框架.poco框架.airtestIDE 组成. Airtest框架 基于图像识别的自动化测试框架,是网易自己团队 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
随机推荐
- HttpComponents
一 概述 1.HttpComponents的作用 HttpComponents的作用是模拟浏览器获取网页内容. 二 使用 1.使用HttpComponents需要先导入架包. 2.使用 Closeab ...
- drupal对数据库操作
// nodenode_load($nid = NULL, $vid = NULL, $reset = FALSE);node_load_multiple($nids = array(), $cond ...
- jQuery源码分析系列(版本1.9 - 1.10)
jQuery是我们常用的javascript库,我们应该不仅要会用它还要知道它的工作原理. 1.jQuery结构及$方法的工作原理 2.对回调函数操作的Callbacks对象 3.promise规范的 ...
- apk接入google play邮箱登陆及充值注意事项
unity3d 接入google play商店相关sdk,相关要求A.环境配置: 1.手机安装谷歌安装器 2.使用谷歌安装器安装Google 服务框架.Google Play服务.Google Pla ...
- log4j2简单使用
http://www.cnblogs.com/lzb1096101803/p/5796849.html 如果是基于的slf4j,看这篇文章去配置 http://blog.csdn.net/neosmi ...
- Business Component(BC)和Business Object(BO)
Siebel应用架构的一个成功的地方就是在应用里引入了BC,BO的概念,从而使得几千张关系数据表能够按照业务的含义组织成业务对象,对于业务人员而言具有了业务上的含义,而不仅仅是从技术人员的观点来对待数 ...
- 点触科技安全验证新模式与逐浪CMS3.9.3新功能预览
是颠覆传统字符验证码的新一代验证码系统.用户通过点击.拖动等有趣方式即可完成验证,防止机器攻击, 应用在注册.登录.数据访问保护.黄牛刷单等场景. 只要在逐浪CMS后台-系统-配置 ,进行简单的配置, ...
- Selenium2学习(十)-- iframe定位
前言 有很多小伙伴在拿163作为登录案例的时候,发现不管怎么定位都无法定位到,到底是什么鬼呢,本篇详细介绍iframe相关的切换 以http://mail.163.com/登录页面10为案例,详细介绍 ...
- SSH 学习记录及在SSH模式下使用XShell连接服务器
传统的网络服务程序,如rsh.FTP.POP和Telnet其本质上都是不安全的:因为它们在网络上用明文传送数据.用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击 ...
- 小草的Trouble学生信息管理系统
小草最近上课学C++,在图书馆纠结了好久,决定做这个小东西,没想到遇到了好多困难,好吧,功夫不负有心人,小草也在敲代码中提高了不少. 小草硬是学了好几天,才搞完这个东西,也算是了结了小草的一个心结. ...