導航:首頁 > IDC知識 > 事件觸發伺服器

事件觸發伺服器

發布時間:2021-03-17 09:21:10

1、java做web工程,如何根據伺服器時間觸發事件?

一樓二樓好像沒明白樓主的意思吧,樓主問的應該是一個知識點而已,3樓的想法有點欠缺,還沒明白spring框架的真髓。4樓說到點上了,用spring Quartz 定時很簡單的。例子還有資料我已經給你發過去了,請查收。

2、js如何直接觸發伺服器按鈕事件

求高手幫忙解決------解決方案--------------------------------------------------------$("#<%=Button1.ClientID%").click();這樣試試------解決方案--------------------------------------------------------JS是觸發不了伺服器控制項的事件的,但是可以把伺服器控制項的事件寫到一個單獨的頁面A,然後用JS提交表單,在A處理事件要做的事------解決方案--------------------------------------------------------引用:JS是觸發不了伺服器控制項的事件的,但是可以把伺服器控制項的事件寫到一個單獨的頁面A,然後用JS提交表單,在A處理事件要做的事如果你的頁面比較簡單,不新建A頁面也可以,直接寫到頁面載入事件里,IsPostBack為真說明是提交的表單------解決方案--------------------------------------------------------document.getElementById('<%Button1.ClientID%').click();Page_Load()------解決方案--------------------------------------------------------引用:引用:Page_Load()肯定在前js是在客戶端運行的Page_Load()是在服務端運行的------解決方案--------------------------------------------------------

3、網路控制系統中事件驅動和事件觸發分別是什麼意思

在網路控制系統中,事件觸發是相對於傳統的時間觸發來說的。在時間觸發中,間隔固定的周期進行觸發,然後網路中每個個體進行感知,通信,計算和控制等行為,這種方法缺乏一定的智能性,可能會造成很多不必要的操作。而事件觸發是根據系統當前的狀態決定是否觸發,如果系統狀態滿足觸發條件才進行各種操作。
事件驅動大概跟事件觸發是同樣的吧,不太確定。

4、事件觸發的過程?

這個時間肯定是存在伺服器的資料庫裡面,不清楚你問的具體是什麼,但具體的思路是這樣的:
1、你發布活動的過程中,有一個活動時間——T,活動內容——C,活動相關人員——P等信息;
2、當你發布後,這些時間——T、內容——C、人員——P等信息就保存到了伺服器的資料庫里;
3、伺服器應該會實時輪詢資料庫中的時間——T欄位,當伺服器當前的運行時間和保存在資料庫中的活動時間——T一致時,系統會觸發相應的事件(觸發代理、郵件、消息伺服器等等)來給活動的相關人員——P發送活動內容——C。

希望對你有所幫助
by adamkisy

5、JS如何調用伺服器端事件(轉載)

比如,在我們寫程序的時候經常會需要動態的生成一些控制項,最簡單的方法就是通過一個字元串,比如string strButton = ,然後輸出到頁面,但是如果我們需要這個控制項來執行一些伺服器的功能,就比較困難了。這里我們就可以用過借用__doPostBack這個函數來完成。接下來我覺個例子來說明一下具體如何調用。 既然要在伺服器端運行那麼,我們可以聲明一個不可見的LinkButton控制項,那通常,我們希望一個控制項不可見,通常都是把visible屬性設為false。但是在這里我們把LinkButton的Text屬性設置為空,來是這個LinkButton不可見(為什麼要這么設置,而不是直接設置visible屬性,我會在下面說明),接下來我們可以在LinkButton裡面寫一些伺服器端的代碼。然後就是如何通過我們動態生成的客戶端控制項來調用LinkButton裡面的功能,我們可以通過一個JavaScript函數來實現 function ExcuteOnServer() { //第一個參數是你希望提交到伺服器的控制項的ID號,第二個參數是事件參數 __doPostBack('LinkButtonID',''); } 接下去我們只需要在動態生成的這個Button控制項的onclick事件中寫上onclick=」JavaScript:ExcuteOnServer();「,這樣當我們點擊這個動態生成的客戶端控制項的時候,他便會執行LinkButton中的代碼。 這樣便實現了動態生成的客戶端控制項提交到伺服器端的功能。 最後要說一下的就是為什麼希望LinkButton控制項不可見的時候,不是通過visible屬性來完成的。

6、用任務計劃程序做個其他用戶的登錄伺服器的提醒,需要用戶登錄的事件作為觸發器,怎麼設置這個?

我也一直在尋求這個答案
不知道你的用戶登錄是指本地還是網路?
你可以利用windows日誌的登錄事件,附加任務解決!
我是用解讀日誌信息的笨方法來獲取到登錄者的用戶名和時間的
希望對你有所幫助。

7、怎麼在js中觸發伺服器按鈕事件,在線等

首先滑鼠點擊一個按鈕觸發JS方法如下:

1
2
3
4
5
6
7
8
9
10

<input type=button value="1" onclick="a('A');b('B');">

<script>
function a(a){
alert(a);
}
function b(b){
alert(b);
}
</script>

2. js觸發另一個按鈕的方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

<html>
<head>
<title>usually function</title>
</head>
<script>
function load(){
//下面兩種方法效果是一樣的
document.getElementById("target").onclick();
document.getElementById("target").click();
}
function test(){
alert("test");
}
</script>
<body onload="load()">
<button id="target" onclick="test()">test</button>
</body>
<html>

3.注釋:document.getElementById("target")獲取到目標的ID值,然後再調用onclick或者是click方法,這樣就會繼續執行令一個按鈕的JS代碼了。

8、Asp.net中服務端控制項事件是如何觸發的

要了解這個問題。首先需要知道。
1. 所有的aspx頁面,最終都會在服務端被編譯成.cs文件
2. 服務端根據請求,調用對應cs文件的對應的代碼
有了上面2點,下面的問題就是,客戶端怎麼通知服務端調用哪一個按鈕的哪一段代碼。例如:button1的Click中的代碼。
這個答案就藏在doPost中,客戶端每次點擊伺服器控制項,都會發送doPost請求,其中會把對應的控制項Id與要觸發的事件名稱發給服務端,服務端根據這兩個參數來調用對應的方法。

9、為什麼事件驅動伺服器這么火

OPPC模型瓶頸

傳統伺服器模型如Apache為每一個請求生成一個子進程。當用戶連接到伺服器的一個子進程就產生,並處理連接。每個連接獲得一個單獨的線程和子進程。當用戶請求數據返回時,子進程開始等待資料庫操作返回。如果此時另一個用戶也請求返回數據,這時就產生了阻塞。

這種模式在非常小的工作負荷是表現良好,當請求的數量變得太大是伺服器會壓力過於巨大。 當Apache達到進程的最大數量,所有進程都變得緩慢。每個請求都有自己的線程,如果服務代碼使用PHP編寫時,每個進程所需要的內存量是相當大的[1]。

fork()操作延時

事實上,基於OPPC的網路並不如想像中的高效。首先新建進程的性能很大程度上依賴於操作系統對fork()的實現,然而不同操作系統的處理並非都理想。如圖為各操作系統fork()的延遲時間對比。

操作系統fork操作只是簡單的拷貝分頁映射。動態鏈接為共享庫和全局偏移表中的ELF(Executable and Linking Format)部分創建太多的分頁映射。雖然靜態的鏈接fork會是的性能大幅度提升,但是延時依然不樂觀。

圖 1 fork延時

進程調度

Linux每10毫秒(Alpha是1毫秒,該值為已編譯常量)中斷一次在運行態的進程,查看是否要切換別的進程執行。進程調度的任務就是決定下一個應該執行的進程,而其難度就在於如何公平的分配CPU資源。一個好的調度演算法應該給每一個進程都分享公平的CPU資源,而且不應該出現飢餓進程。

Unix系統採用多級反饋隊列調度演算法。使用多個不同優先順序的就緒隊列,使用Heap保持隊列按優先順序順序排序。Linux 2.6版本提供了一個復雜度O(1)的調度演算法,將進程調度延時降至最小。但是進程調度的頻率是100Hz,意味著10毫秒會中止一個進程而判斷是否需要切換到另一個進程。如果切換過多,會讓CPU忙於切換,導致降低吞吐量。

內存佔用與線程

創建多進程會帶來另外一個問題:內存消耗。

每一個創建的進程都會佔用內存,在Linux 2.6中的測試結果,400個左右的連接後fork()的性能要超過pthread_create()的性能。IBM對Linux做過優化後,一個進程可以處理10萬個連接。fork()在每一個連接時都fork()一次成本太高,多線程在於需要考慮線程安全(thread-safe)與死鎖(deadlock),以及內存泄露問題這些問題。

可靠性

該模型具有可靠性問題。一個配置不當的伺服器,很容易遭受拒絕服務攻擊(DoS)。當大量並發請求的伺服器資源時,負載均衡配置不當時伺服器會很快耗盡源而奔潰。

同步阻塞 I/O

在這個模型中,應用程序執行一個系統調用,這會導致應用程序阻塞。這意味著應用程序會一直阻塞,直到系統調用完成為止(數據傳輸完成或發生錯誤)。調用應用程序處於一種不再佔用CPU,而只是簡單等待響應的狀態,但是該進程依然佔用著資源。當大量並發I/O請求到達時,則會產生I/O阻塞,造成伺服器瓶頸。

事件驅動模型伺服器

通過上訴分析與實驗說明,事實上,操作系統並不是設計來處理伺服器工作負載。傳統的線程模型是基於運行應用程序是的一些密集型操作的需要。 操作系統的設計是讓用戶執行的多線程程序,使後台文件寫入和UI操作同時進行,而並不是設計於處理大量並發請求連接。

Fork和多線程是相當費資源的操作,創建線程需要分配一個全新的內存堆棧。此外,上下文切換也是一項開銷的,CPU調度模型是並不太適合一個傳統的Web伺服器。

因此,OPPC模型面臨著多進程多線程的延遲已經內存消耗的問題。要用OPPC模型解決C10K問題顯得十分復雜。

為解決C10K問題,一些新的伺服器呈現出來。下列是解決C10K問題的Web伺服器:

nginx:一個基於事件驅動的處理請求架構反向代理伺服器。
Cherokee:Twitter使用的開源Web伺服器。
Tornado:一個Python語言實現的非阻塞式Web伺服器框架。Facebook的FriendFeed模塊使用此框架完成。
Node.js:非同步非阻塞Web伺服器,運行於Google V8 JavaScript引擎。
顯然以上解決C10K問題的伺服器都有著共同特點:事件驅動,非同步非阻塞技術。

由於網路負載工作包括大量的等待。比如 Apache伺服器,產生大量的子進程,需要消耗大量內存。但大多數子進程佔用大量內存資源卻只是在等待一個阻塞任務結束。由於這一特點,新模型拋棄了對每個請求生成子進程的想法。所有的請求和事物操作只使用一個單獨的線程管理,此線程被稱之為事件循環。事件循環將非同步的管理所有用戶連接與文件存儲或資料庫伺服器。當請求到達時,使用poll或者select喚醒操作系統對其請求做相應處理。解決了很多問題。這樣以來處理的並發請求不再是緊緊圍繞在阻塞資源。當然,這樣也有一定的開銷,如保持一個始終打開的TCP連接的列表,但內存並不會由於大量並發請求而急速上升,因為這個列表只佔內存堆上很小的一部分。Node.js和Nginx的都用這種方法來構建應用程序的規模超級大的連接數。一切操作都由一個事件循環管理,並很好地處理多個連接[4](圖3)。

目前最為流行的事件驅動的非同步非阻塞式I/O的Web伺服器Node.js,稱其會在內存佔用上更為高效,而且由於不是傳統OPPC模式,也不用擔心死鎖。Node.js沒有函數直接執行I/O操作[5],因此也不會產生阻塞[6]。

圖 3 事件驅動模型

圖 4 傳統OPPC模型

本文對目前應用最廣的傳統模型的Apache+PHP伺服器,與兩個流行事件驅動模型伺服器Node.js,tornado,進行了壓力測試。使用Apache bench對三個伺服器分別進行每次1000個並發請求,總共100000次請求測試。分別監測和記錄了三個伺服器的內存與CPU佔用情況。

實驗環境為Ubuntu 11.10,Intel Celeron 1.86GHzCPU,內存1G(oh no,教研室的古董機子)。伺服器分別為Apache2+PHP5.5,Node.js0.8.6和Tornado2.4.1。

{% include_code Nodejs nodeTest.sh %}

{% include_code Tornado tornadoTest.sh %}

{% include_code PHP phpTest.sh %}

圖4 內存佔用

圖 5 CPU佔用

在這個1000並發請求的壓力測試中可以看到,基於事件驅動的Node.js與Tornado都比傳統OPPC模型的Apache伺服器要快。當然Node.js的性能也離不開其運行於Google V8引擎上的原因。兩個事件驅動模型伺服器平均每秒處理的請求數為Apache伺服器的一倍,而內存降低了一半。圖2顯示事件驅動模型伺服器會佔用更高的CPU,這說明這種模型雖然是單線程運行,但是能更高效的利用CPU處理更多的並發請求。

存在的不足

事件循環並不能解決一切問題[2]。特別是在Node.js的有一些缺陷。Node.js的最明顯的遺漏是多線程的實現。事件驅動技術似乎應該都是多線程進行的,如大多數事件驅動GUI框架。理論上來說,事件之間應該是相互獨立的關系,因此並行化應該並不難實現。

雖然理論上是這樣,但一些技術上的原因使得Node.js難以實現多線程。Node.js運行與Google的V8 Javascript引擎上[12]。V8引擎是一個高性能的JavaScript引擎,但它並沒有設計為多線程。因為它原本為Google Chrome瀏覽器Javascript引擎,瀏覽器中Javascropt在一個單線程上運行。因此添加多線程,將是非常艱難的,底層架構並非為伺服器而設計。

未來

隨著nginx這樣的反向代理伺服器的發展,可以讓獨立運行的實例之間的負載均衡,Node.js的作者提出對解決多線程缺陷的最好的辦法是使用fork子進程,利用負載均衡來達到伺服器並發任務處理。 這種解決方案似乎像是要掩蓋其實現上的缺陷。但事件驅動模型倡導一個邏輯伺服器應該應該能在單核CPU下表現得最優,以及佔用更少的內存。與此相反,Apache的最初目的是以一切可利用的資源為代價充分高效管理並發和線程。事件驅動模型伺服器避開了這種繁瑣的設計而用最簡潔高效的方式實現了可擴展性良好的伺服器。

單線程的也正符合雲計算的平台的計算單位。很明顯,一個單一的雲實例,非常適合運行一個單一的Node.js的伺服器,並使用負載均衡橫向擴展。

事件驅動模型的出現,是為了解決傳統伺服器與網路工作負載的需求的不匹配,實現高度可伸縮伺服器,並降低內存開銷。事情驅動模型更改了連接到伺服器的方式。所有的連接都由事件循環管理,每個連接觸發一個在事件循環進程中運行的事件,而不是為每個連接生成一個新的 OS 線程,並為其分配一些配套內存。因此不用擔心出現死鎖,而且不會直接調用阻塞資源,而採用非同步的方式來實現非阻塞式I/O。通過事件驅動模型是的在相同配置的伺服器能接受更多的並發請求,實現可伸縮的伺服器。

10、javascript觸發伺服器控制項Button的單擊事件報錯怎麼解決

如果要執行一個按鈕的click事件應該是

document.getElementById("Button1").onclick();

與事件觸發伺服器相關的知識