導航:首頁 > 異常信息 > 網路伺服器連接池

網路伺服器連接池

發布時間:2022-05-27 01:27:05

1. was伺服器中連接池連接數是干什麼用的

最大:連接池裡面同時存在的最大連接。
最小:連接池裡面同時存在的最小連接。

連接池裡面存在的連接數是可變的,不夠用自動增加,增加到最大就不在增加了只能等待。

2. 連接池有那幾種 分別有什麼區別

在講解連接池之前,先弄懂以下幾個概念:

數據源:Data source , 讀取數據的來源,也就是說你的系統要讀取的數據去什麼地方找(存放數據的地方)!

JDBC:全稱為Java DataBase Connectivity standard, 它是一個面向對象的應用程序介面(API), 通過它可訪問各類關系資料庫。
兩者之間的關系: 數據源並不等於連接池,數據源不是必須要求實現連接池的,即連接池是數據源的一種.

c3p0: hibernate.cfg.xml中配置
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration- 3.0.dtd">
<hibernate-configuration>
<session-factory >
<!--JDBC驅動程序-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 連接資料庫的URL-->
<property name="connection.url"> jdbc:mysql://localhost:3306/application_context </property>
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
<!--連接的登錄名--> <property name="connection.username">root</property>
<!--登錄密碼-->
<property name="connection.password">paul</property>

<!-- C3P0連接池設定-->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 最大連接數 -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- 最小連接數 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 獲得連接的超時時間,如果超過這個時間,會拋出異常,單位毫秒 -->
<property name="hibernate.c3p0.timeout">120</property>
<!-- 最大的PreparedStatement的數量 -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 每隔120秒檢查連接池裡的空閑連接 ,單位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property>
<!-- 當連接池裡面的連接用完的時候,C3P0一下獲取的新的連接數 -->
<property name="hibernate.c3p0.acquire_increment">2</property>

<!--其它配置-->
……
</session-factory>
</hibernate-configuration>

dbcp: hibernate.cfg.xml中配置
<property name="dbcp.maxActive">100</property>
<property name="dbcp.whenExhaustedAction">1</property>
<property name="dbcp.maxWait">60000</property>
<property name="dbcp.maxIdle">10</property>

<property name="dbcp.ps.maxActive">100</property>
<property name="dbcp.ps.whenExhaustedAction">1</property>
<property name="dbcp.ps.maxWait">60000</property>
<property name="dbcp.ps.maxIdle">10</property>

proxool: hibernate.cfg.xml中配置 先寫proxool的配置文件,文件名:proxool.xml(一般放在與hibernate.cfg.xml文件在同一個目錄中) <?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<!--連接池的別名-->
<alias>DBPool</alias>
<!--proxool只能管理由自己產生的連接-->

<driver-url>jdbc:mysql://localhost:3306/application_context?useUnicode=true&characterEncoding=UTF8</driver-url>

<!?JDBC驅動程序-->
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value=""/>
</driver-properties>

<!-- proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空閑連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受-->
<maximum-new-connections>20</maximum-new-connections>
<!-- 最少保持的空閑連接數-->
<prototype-count>5</prototype-count>

<!-- 允許最大連接數,超過了這個連接,再有請求時,就排在隊列中等候,最大的等待請求數由maximum-new-connections決定-->
<maximum-connection-count>100</maximum-connection-count> <!-- 最小連接數-->
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely> 配置hibernate.cfg.xml文件 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate- configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">DBPool</property>
<property name="hibernate.proxool.xml">proxoolconf.xml</property>
</session-factory>
</hibernate-configuration>.JNDI: hibernate.cfg.xml中配置JNDI連接池,數據源已經由應用服務配置好(如Web伺服器),Hibernate需要做的只是通過JNDI名查找到此數據源。應用伺服器將連接池對外顯示為JNDI綁定數據源,它是javax.jdbc.Datasource類的一個實例。只要配置一個Hibernate文件,如: hibernate.connection.datasource=java:/comp/env/jdbc/JNDI_NAME //JNDI名
hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_loopup_class=org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect=org.hibernate.dialect.MySQLDialect

區別:在hibernate3.0中,已經不再支持dbcp了,hibernate的作者在hibernate.org中,明確指出在實踐中發現 dbcp有BUG,在某些種情會產生很多空連接不能釋放,所以拋棄了對dbcp的支持。proxool不少行家推薦使用.c3p0佔用資源比較大,效率也不高.

3. 創建鏈接池管理對象

首先,讓我們來看看連接池的概念:
1。連接池允許應用程序從連接池中獲得一個連接並使用這個連接,而不需要為每一個連接請求重新建立一個連接。一旦一個新的連接被創建並且放置在連接池中,應用程序就可以重復使用這個連接而不必實施整個資料庫連接創建過程。
2。當應用程序請求一個連接時,連接池為該應用程序分配一個連接而不是重新建立一個連接;當應用程序使用完連接後,該連接被歸還給連接池而不是直接釋放。
優點:
1。使用連接池的最主要的優點是性能。
2。創建一個新的資料庫連接所耗費的時間主要取決於網路的速度以及應用程序和資料庫伺服器的(網路)距離,而且這個過程通常是一個很耗時的過程。而採用資料庫連接池後,資料庫連接請求可以直接通過連接池滿足而不需要為該請求重新連接、認證到資料庫伺服器,這樣就節省了時間。
缺點:
1。資料庫連接池中可能存在著多個沒有被使用的連接一直連接著資料庫(這意味著資源的浪費)。
ps:這必須要求開發人員在開發時估計這個系統最大提供的數量是多少。
池的創建和分配
當連接打開時,將根據一種精確的匹配演算法來創建連接池,該演算法會使連接池與連接中的字元串相關聯。每個連接池都與一個不同的連接字元串相關聯。當新連接打開時,如果連接字元串不精確匹配現有池,則將創建一個新池。
在以下示例中,將創建三個新的 SqlConnection 對象,但只需要使用兩個連接池來管理這些對象。請注意,第一個和第二個連接字元串的差異在於為 Initial Catalog 分配的值。
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();
// 連接池A創建了
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";
conn.Open();
// 連接池B創建了,因為ConnectionString與A不匹配
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();
// 使用A的連接池,因為ConnectionString與A匹配
連接池一旦創建,直到活動進程終止時才會被毀壞。非活動或空池的維護只需要最少的系統開銷。
連接的添加
連接池是為每個唯一的連接字元串創建的。當創建一個池後,將創建多個連接對象並將其添加到該池中,以滿足最小池大小的要求。連接將根據需要添加到池中,直至達到最大池大小。
當請求 SqlConnection 對象時,如果存在可用的連接,則將從池中獲取該對象。若要成為可用連接,該連接當前必須未被使用,具有匹配的事務上下文或者不與任何事務上下文相關聯,並且具有與伺服器的有效鏈接。
如果已達到最大池大小且不存在可用的連接,則該請求將會排隊。當連接被釋放回池中時,連接池管理程序通過重新分配連接來滿足這些請求。對 Connection 調用 Close 或 Dispose 時,連接被釋放回池中。
警告 建議使用完 Connection 後始終將其關閉,以便連接可以返回到池中。這可以使用 Connection 對象的 Close 或 Dispose 方法來實現。不是顯式關閉的連接可能不會添加或返回到池中。例如,如果連接已超出范圍但沒有顯式關閉,則僅當達到最大池大小而該連接仍然有效時,該連接才會返回到連接池中。
注意 不要在類的 Finalize 方法中對 Connection、DataReader 或任何其他託管對象調用 Close 或 Dispose。在終結器中,僅釋放類直接擁有的非託管資源。如果類不擁有任何非託管資源,則不要在類定義中包含 Finalize 方法。有關更多信息,請參見垃圾回收編程。
連接的移除
如果連接生存期已過期,或者連接池管理程序檢測到與伺服器的連接已斷開,連接池管理程序將從池中移除該連接。請注意,只有在嘗試與伺服器進行通信後,才可以檢測到這種情況。如果發現某連接不再連接到伺服器,則會將其標記為無效。連接池管理程序會定期掃描連接池,查找已釋放到池中並標記為無效的對象。找到後,這些連接將被永久移除。
如果存在與已消失的伺服器的連接,那麼即使連接池管理程序未檢測到已斷開的連接並將其標記為無效,仍有可能將此連接從池中取出。當發生這種情況時,將生成異常。但是,為了將該連接釋放回池中,仍必須將其關閉。
字元串關鍵字:
Connection Lifetime 0 當連接返回到池中時,將對它的創建時間和當前時間進行比較,如果時間間隔超過由 Connection Lifetime 指定的值(以秒為單位),則會毀壞該連接。在聚集配置中可以使用它來強制在運行伺服器和剛聯機的伺服器之間達到負載平衡。
如果值為零 (0),則將使池連接具有最大的超時期限。

Connection Reset 'true' 確定在從池中移除資料庫連接時是否將其重置。對於 Microsoft SQL Server 版本 7.0,如果設置為 false,將避免在獲取連接時經歷一個額外的往返過程,但必須注意的是連接狀態(如資料庫上下文)不會被重置。
Enlist 'true' 當為 true 時,如果存在事務上下文,池管理程序將自動在創建線程的當前事務上下文中登記連接。
Max Pool Size 100 池中允許的最大連接數。
Min Pool Size 0 池中維護的最小連接數。
Pooling 'true' 當為 true 時,將從相應的池中取出連接,或者在必要時創建連接並將其添加到相應的池中。

4. websocket 有連接池么

你可以把 WebSocket 看成是 HTTP 協議為了支持長連接所打的一個大補丁,它和 HTTP 有一些共性,是為了解決 HTTP 本身無法解決的某些問題而做出的一個改良設計。在以前 HTTP 協議中所謂的 keep-alive connection 是指在一次 TCP 連接中完成多個 HTTP 請求,但是對每個請求仍然要單獨發 header;所謂的 polling 是指從客戶端(一般就是瀏覽器)不斷主動的向伺服器發 HTTP 請求查詢是否有新數據。這兩種模式有一個共同的缺點,就是除了真正的數據部分外,伺服器和客戶端還要大量交換 HTTP header,信息交換效率很低。它們建立的「長連接」都是偽.長連接,只不過好處是不需要對現有的 HTTP server 和瀏覽器架構做修改就能實現。

WebSocket 解決的第一個問題是,通過第一個 HTTP request 建立了 TCP 連接之後,之後的交換數據都不需要再發 HTTP request了,使得這個長連接變成了一個真.長連接。但是不需要發送 HTTP header就能交換數據顯然和原有的 HTTP 協議是有區別的,所以它需要對伺服器和客戶端都進行升級才能實現。在此基礎上 WebSocket 還是一個雙通道的連接,在同一個 TCP 連接上既可以發也可以收信息。此外還有 multiplexing 功能,幾個不同的 URI 可以復用同一個 WebSocket 連接。這些都是原來的 HTTP 不能做到的。

另外說一點技術細節,因為看到有人提問 WebSocket 可能進入某種半死不活的狀態。這實際上也是原有網路世界的一些缺陷性設計。上面所說的 WebSocket 真.長連接雖然解決了伺服器和客戶端兩邊的問題,但坑爹的是網路應用除了伺服器和客戶端之外,另一個巨大的存在是中間的網路鏈路。一個 HTTP/WebSocket 連接往往要經過無數的路由,防火牆。你以為你的數據是在一個「連接」中發送的,實際上它要跨越千山萬水,經過無數次轉發,過濾,才能最終抵達終點。在這過程中,中間節點的處理方法很可能會讓你意想不到。

比如說,這些坑爹的中間節點可能會認為一份連接在一段時間內沒有數據發送就等於失效,它們會自作主張的切斷這些連接。在這種情況下,不論伺服器還是客戶端都不會收到任何提示,它們只會一廂情願的以為彼此間的紅線還在,徒勞地一邊又一邊地發送抵達不了彼岸的信息。而計算機網路協議棧的實現中又會有一層套一層的緩存,除非填滿這些緩存,你的程序根本不會發現任何錯誤。這樣,本來一個美好的 WebSocket 長連接,就可能在毫不知情的情況下進入了半死不活狀態。

而解決方案,WebSocket 的設計者們也早已想過。就是讓伺服器和客戶端能夠發送 Ping/Pong Frame(RFC 6455 - The WebSocket Protocol)。這種 Frame 是一種特殊的數據包,它只包含一些元數據而不需要真正的 Data Payload,可以在不影響 Application 的情況下維持住中間網路的連接狀態。

5. 伺服器連接資料庫問題(單立和連接池)

你說的這是什麼?單立?是單例模式吧。

所謂單例模式,把構造器這是為private,建立類的時候,用一個特殊的方法獲取,這個方法判斷類是否已經建立,建立過就返回之前的引用,否則再新建一個。

連接池,你可以看做一個map,裡面存了一些連接,在獲取連接的時候,從這個map里獲取。

單例和連接池沒什麼關系啊,你的問題實在是沒看明白。

6. ftp伺服器可以像資料庫一樣提供連接池嗎

伺服器的范圍很廣,但一般說的伺服器都指至少在同一個區域網內給其它電腦提供公供數據存取用的某台電腦,同理或在廣域網上用的
比如游戲運營公司的伺服器,資料庫也一樣,通常都指的是資料庫軟體,比如,SQL SERVER、ACCESS等等,一般作為伺服器的電腦上根據實際的需求會選擇安裝不同資料庫軟體或者不安裝,裝了資料庫軟體後正常都會有與之配套的應用軟體來操作資料庫。

7. 連接池是由應用程序建立的還是由資料庫建立的

了解一下連接池的原理,你就知道資料庫不管這事。

連接池由應用程序或應用伺服器創建和管理。

8. 資料庫連接池的作用是什麼

連接池是被j2ee伺服器打開和維護的 對應1、2、4的JDBC驅動程序 連接池一般比直接連接更有優越性 因為它提高了性能的同時還保存了 寶貴的資源。 打開資料庫連接時CPU和網路的重要 任務,因此,在整個應用程序的使用過程 當中重復的打開直接連接將導致性能的下降。 而池連接只在伺服器啟動時打開一次,從而 消除了這種性能問題。 另外,因為連接只用於很短的時間, 所以,連接可以被有效共享, 而且有關連接參數的特有信息, 只對池驅動程序有效, 如資料庫用戶名稱和密碼, 從而增強了系統的安全性和可管理性。

9. tomcat怎麼連接應用伺服器連接池

什麼是敏捷開發
簡單的說,敏捷開發是一種以人為核心、迭代、循序漸進的開發方法。在敏捷開發中,軟體項目的構建被切分成多個子項目,
各個子項目的成果都經過測試,具備集成和可運行的特徵。換言之,就是把一個大項目分為多個相互聯系,但也可獨立運行的小項目,
並分別完成,在此過程中軟體一直處於可使用狀態。
Tomcat中配置連接池步驟
本方法的原理是,在%CATALINA%\conf\server.xml中設置資料庫的連接屬性,
在應用目錄的/WEB-INF/web.xml中配置一個引用,
然後在應用中的/META-INF/context.xml中將以上兩個配置聯系起來。
所以真正產生連接的是tomcat系統級,因此資料庫驅動應該放在%CATALINA%\common\lib中

閱讀全文

與網路伺服器連接池相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:547
電腦無法檢測到網路代理 瀏覽:1404
筆記本電腦一天會用多少流量 瀏覽:702
蘋果電腦整機轉移新機 瀏覽:1400
突然無法連接工作網路 瀏覽:1160
聯通網路怎麼設置才好 瀏覽:1257
小區網路電腦怎麼連接路由器 瀏覽:1141
p1108列印機網路共享 瀏覽:1236
怎麼調節台式電腦護眼 瀏覽:794
深圳天虹蘋果電腦 瀏覽:1028
網路總是異常斷開 瀏覽:639
中級配置台式電腦 瀏覽:1094
中國網路安全的戰士 瀏覽:656
同志網站在哪裡 瀏覽:1451
版觀看完整完結免費手機在線 瀏覽:1482
怎樣切換默認數據網路設置 瀏覽:1142
肯德基無線網無法訪問網路 瀏覽:1334
光纖貓怎麼連接不上網路 瀏覽:1573
神武3手游網路連接 瀏覽:992
局網列印機網路共享 瀏覽:1021