在这篇文章中,我们将为您详细介绍OkHttp:单个域的单独连接池这是个好主意吗?的内容,并且讨论关于http单独连接的好处的相关问题。此外,我们还会涉及一些关于asp.net-mvc–抽象的CRUD控
在这篇文章中,我们将为您详细介绍OkHttp:单个域的单独连接池这是个好主意吗?的内容,并且讨论关于http单独连接的好处的相关问题。此外,我们还会涉及一些关于asp.net-mvc – 抽象的CRUD控制器是个好主意吗?、c – 将未初始化的变量传递给srand是个好主意吗?、c – 通过公共const指针封装是个好主意吗?、HTML – 为身体标签设计风格是个好主意吗?的知识,以帮助您更全面地了解这个主题。
本文目录一览:- OkHttp:单个域的单独连接池这是个好主意吗?(http单独连接的好处)
- asp.net-mvc – 抽象的CRUD控制器是个好主意吗?
- c – 将未初始化的变量传递给srand是个好主意吗?
- c – 通过公共const指针封装是个好主意吗?
- HTML – 为身体标签设计风格是个好主意吗?
OkHttp:单个域的单独连接池这是个好主意吗?(http单独连接的好处)
如何解决OkHttp:单个域的单独连接池这是个好主意吗??
我在我的 Java 应用程序中使用 OkHttp 库。此应用程序对不同的外部服务进行了大量 API 调用,但大多数调用是在同一域上进行的,如下所示:
- DOMAIN 1,约占总调用次数的 55%
- DOMAIN 2,约占总调用次数的 35%
- 其他域,约占总调用次数的 10%
目前我有三个单独的 ConnectionPool
对象,以及相应的 OkHttpClient
对象。如果我理解正确,ConnectionPool
的目的是保持连接处于活动状态,以便在向同一域发出第二个请求时重用。因此,在我看来,为那些我知道我发出大量请求(我每分钟执行大约 1.000 次调用)的域设置单独的连接池是有意义的,但我在网上发现了这一点:
应用程序应该避免创建许多连接池,因为这样做 防止连接重用。每个连接池都拥有自己的一组 连接处于活动状态,因此具有许多池的应用程序也有风险 耗尽内存!
OkHttp 3 中的最佳实践是创建单个 OkHttpClient 实例并在整个应用程序中共享它。需要的请求 定制的客户端应该调用 OkHttpClient.newBuilder() 共享实例。这允许定制而没有缺点 单独的连接池。
所以我的问题是:我应该更改我的代码并为每个请求重用相同的对象,还是可以保持我正在做的方式?另外,从哪个开始可能是一个不错的 THREADS_NUMBER?我目前为每个池使用大约 60 个线程并且没有任何问题,但我想知道是否有一个“公式”来计算更精确/推荐的数字。
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
asp.net-mvc – 抽象的CRUD控制器是个好主意吗?
这有效并避免重复某些代码并使应用程序更加同质,但是当您看到Controller很难确切地看到它实现了哪些操作时,它可能会实现一些不应存在的操作.例如,假设您想要编辑传递名称而不是id,您必须创建一个新的EditByName(名称),甚至这样做,您仍然可以使用编辑(id)操作,因为它位于基础中.
对我来说,整个事情对我来说有点香,但我没有找到任何显示替代品的例子,因为我看到的MVC应用程序有一个非常狭窄的域.有什么建议吗?任何例子? (我不一定是在ASP.NET MVC中,我认为这个问题对于任何MVC框架都是非常通用的).
解决方法
我的投票是将那些真正常见或者是贯穿各领域的事情重构为基类,而不是试图强迫一种可能并不存在的“是一种”关系.
c – 将未初始化的变量传递给srand是个好主意吗?
它是一个#include和一个函数调用较少.
示例代码:
#include <stdlib.h> int main(void) { { usigned seed; //uninitialized srand(seed); } //other code return 0; }
代替
#include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); //other code return 0; }
解决方法
读取未初始化的值会导致未定义的行为.它可以是零,它可以是半随机的 – 但是因此,它可以重复地是相同的值.它也可能导致编译或运行时错误,或者做任何其他完全不可预测的事情.
然后,编译程序的其他人会注意到编译器有关未初始化值的警告并尝试修复它.他可能正确地修复它,或者给予足够复杂的程序,他可能只是将它初始化为零.这就是‘small’ bugs turn into huge bugs.
只需使用printf()替换srand()来尝试您的代码段:
#include <stdio.h> int main() { { unsigned seed; printf("%u\n",seed); } return 0; }
在我的系统上,它反复给出0.这意味着至少有一个系统,你的代码被破坏了:).
c – 通过公共const指针封装是个好主意吗?
>明智的做法是不要直接在您的API中暴露您的ivars;相反,使用访问器
>指向非const对象的const指针只是意味着您可以更改对象,但不能重定向指针指向的位置
这是我的情况:
我有一些相关的课程.我想创建一个简单的类,通过组合,将它们组合成一个逻辑接口.我的每个封闭类在其API中都有公共和私有区别,因此我不介意将它们直接暴露给我父类的用户.这意味着我为这些ivars编写访问器对我来说太过分了,因为类已经管理了什么是公共的,什么不是.但是,我不希望用户更改包含在此组合父类中的实际对象.
所以我能想到的唯一方法就是使用这些对象的const指针,如下:
class Parent{ public: EnclosedClass1*const ec1; //users can enjoy the public API of EnclosedClass EnclosedClass2*const ec2; void convenienceMethod(){ //performs inter-related functions on both ec1 and ec2 } }
这样,让某人直接与ec1和ec2的API接口是没有害处的,但是,我想确保这是相当万无一失的,因为至少那个人不能改变被操纵的实际资源,因此是const指针.
这是否有意义,是否很好地使用了const指针?
或者,我可以将它们完全保密,忘记指针(无论如何这个类管理这些对象),并且只需要为这些对象中包含的公共函数编写访问器.但这似乎有点矫枉过正了吧?
解决方法
如果您不希望修改私有数据指针,那么您不提供setter,只提供getter.
class Parent{ private: EnclosedClass1*const ec1; EnclosedClass2*const ec2; public: EnclosedClass1* getEnclosedClass1() const {...}; EnclosedClass2* getEnclosedClass2() const {...}; void convenienceMethod(){ }
}
另一种可能性(如@pmr在下面的评论中提出的)是:
const EnclosedClass1& getEnclosedClass1() const {...};const EnclosedClass2& getEnclosedClass2() const {...};
使用const引用可以保护用户不会测试getter返回的值.但是你必须确保你的对象状态是一致的,并且永远不会有指向nullptr的内部指针;在这种情况下,你应该抛出异常.
HTML – 为身体标签设计风格是个好主意吗?
在我的固定宽度网站中,我有一个类似于这样的布局:
我的CSS与此类似:
#wrapper {
width: 700px;
margin-left: auto;
margin-right: auto;
}
设置< body>的样式标签以同样的方式也可以工作,它使我的代码更具可读性,因为我有更少的嵌套< div>标签.
将边距和固定值应用于< body>一个安全的想法?
最佳答案
这是非常安全的,body是一个像所有其他人一样的HTML元素.
对于您的布局,您可能仍然希望使用#wrapper(看起来像固定宽度布局),因为您可能想要为body设置背景(或使用可见的“空”空间执行某些操作).
今天的关于OkHttp:单个域的单独连接池这是个好主意吗?和http单独连接的好处的分享已经结束,谢谢您的关注,如果想了解更多关于asp.net-mvc – 抽象的CRUD控制器是个好主意吗?、c – 将未初始化的变量传递给srand是个好主意吗?、c – 通过公共const指针封装是个好主意吗?、HTML – 为身体标签设计风格是个好主意吗?的相关知识,请在本站进行查询。
本文标签: