st_asio_wrapper使用FAQ(2019.10.17更新)

Q:tcp服务端(server_base)和tcp客户端(client_socket_base)都有个函数set_server_addr,有何区别?

A:典型的网络编程基本知识,服务端设置的是监听地址,客户端设置的是连接地址,这个问题并不是st_asio_wrapper特有的,属于网络编程基础知识。

Q:如何不让client_socket_base重连接?

A:重连接分两种情况,首次连接和断线之后的连接,st_asio_wrapper做一样的处理。当连接失败,或者连接断开之后,client_socket_base会回调prepare_reconnect虚函数,期望得到一个单位为毫秒的整数值,如果这个值大于等于0,则在相应毫秒数之后,开始重连接,如果小于0,则不再重连接。
另外,如果你重写了on_recv_error,并且没有调用父类的同名函数,则也不会重新连接服务器(这种情况专指断线之后的重连)。

Q:什么是service,为什么有些时候service会自动退出?

A:从i_service继承得到的对象都是service对象,他们负责所有网络事件的调度,还有比如定时器之类。当service没有事可做的时候,就自动退出了(这是asio的设计),之前的st_asio_wrapper本来不会有service退出的情况,但最近由于添加了重连次数功能,所以客户端有可能会自动退出service(使用者放弃重连接)。那么如何防止客户端service自动退出呢,答案是定义ST_ASIO_AVOID_AUTO_STOP_SERVICE宏。

Q:为什么没有连接失败的事件?

A:在收到on_connect回调之前,都是连接失败的状态,不需要事件;如果已经成功的连接断开了,则会收到on_recv_error回调。

Q:接口被重写了,还需要调用父类的同名函数吗?

A:这个要看函数的具体功能,比如初始化之类的虚函数,重写之后,在最后一定要调用父类的同名函数,如果你不需要父类的逻辑(或者父类根本没有逻辑,比如on_msg_send),或者你的逻辑已经包括了父类的逻辑,则可以不调用父类的同名函数。

Q:如何不让st_asio_wrapper输出到控制台?

A:定义ST_ASIO_NO_UNIFIED_OUT,则st_asio_wrapper里面所有输出就失效了(demo里面的输出不会失败,因为是直接使用的crt函数,比如printf)。

Q:st_asio_wrapper的类继承层次是怎样的?

Q:st_asio_wrapper主要业务时序图?

客户端连接时序图

服务端接受连接时序图

消息接收并处理时序图,不使用消息缓存(客户端和服务端完全一样)

消息接收并处理时序图,使用消息缓存(客户端和服务端完全一样)

消息发送时序图(客户端和服务端完全一样,图片有点小错误,send_msg之后只是post一个消息给service_pump,然后在异步回调里面调用async_write)

Q:如何防止端口重用?

A:定义ST_ASIO_NOT_REUSE_ADDRESS宏。

 

Q:下载地址在哪里?

git:https://github.com/youngwolf-project/st_asio_wrapper/,ascs在与st_asio_wrapper同级目录里面,另外,我的资源里面也有下载,但不是最新的。
QQ交流群:198941541,这里面有每个版本的压缩包,全是最新的。

 

Q:在linux下如何编译demo?

release 版本是make;
debug版本是make debug。

 

 

C/S框架 st_asio_wrapper 开发教程(五)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章